ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAwYzMyNDE1Li5iNmVhYTg5IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTkgQEAKIENoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMjoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorKiBQYXRjaCBieSBUaG9tYXMgRWxzdGUsIDEwIEZlYiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgTkVUKzUwIENQVSBhbmQgTW9kTkVUNTAgYm9hcmQKKworKiBQYXRjaCBieSBTYW0gU29uZywgMTAgRmViIDIwMDQ6CisgIEZpeCB0eXBvcyBpbiBjZmlfZmxhc2guYworCisqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTAgRmViIDIwMDQKKyAgRml4ZWQgbG9uZyBkaXIgZW50cnkgc2xvdCBpZCBjYWxjdWxhdGlvbiBpbiBnZXRfdmZhdG5hbWUKKworKiBQYXRjaCBieSBSb2JpbiBHaWxrcywgMTAgRmViIDIwMDQ6CisgIGFkZCAiaXRlc3QiIGNvbW1hbmQgKG9wZXJhdG9yczogLWVxLCAtbmUsIC1sdCwgLWd0LCAtbGUsIC1nZSwgPT0sCisgICE9LCA8PiwgPCwgPiwgPD0sID49KQorCiAqIEZpeCBwcm9ibGVtIHdpdGggc2lkZSBlZmZlY3RzIGluIG1hY3JvcyBpbiBpbmNsdWRlL3VzYi5oCiAKICogUGF0Y2ggYnkgRGF2aWQgQmVuc29uLCAxMyBOb3YgMjAwMzoKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggOTY1YjkzZC4uMzUyNWQ4NyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTk1OSw2ICs5NTksOSBAQAogZXA3MzEyX2NvbmZpZwk6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtNzIwdCBlcDczMTIKIAorbW9kbmV0NTBfY29uZmlnIDoJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm03MjB0IG1vZG5ldDUwCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIFhTY2FsZSBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggNDFlOTllMy4uMmM1NjgyMCAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtNjQ0LDYgKzY0NCw3IEBACiAJCUNGR19DTURfSU1MUwkgIExpc3QgYWxsIGZvdW5kIGltYWdlcwogCQlDRkdfQ01EX0lNTUFQCSogSU1NUiBkdW1wIHN1cHBvcnQKIAkJQ0ZHX0NNRF9JUlEJKiBpcnFpbmZvCisJCUNGR19DTURfSVRFU1QJKiBJbnRlZ2VyL3N0cmluZyB0ZXN0IG9mIDIgdmFsdWVzCiAJCUNGR19DTURfSkZGUzIJKiBKRkZTMiBTdXBwb3J0CiAJCUNGR19DTURfS0dEQgkqIGtnZGIKIAkJQ0ZHX0NNRF9MT0FEQgkgIGxvYWRiCmRpZmYgLS1naXQgYS9ib2FyZC9tb2RuZXQ1MC9NYWtlZmlsZSBiL2JvYXJkL21vZG5ldDUwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYmNjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tb2RuZXQ1MC9NYWtlZmlsZQpAQCAtMCwwICsxLDQ3IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gbW9kbmV0NTAubyBmbGFzaC5vCitTT0JKUwk6PSBtZW1zZXR1cC5vCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworLWluY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tb2RuZXQ1MC9jb25maWcubWsgYi9ib2FyZC9tb2RuZXQ1MC9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkNDgzNgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21vZG5ldDUwL2NvbmZpZy5tawpAQCAtMCwwICsxLDI5IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMAorIyBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyMgTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorIworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitURVhUX0JBU0UgPSAweDAwZjAwMDAwCisjQ1JPU1NfQ09NUElMRSA9IGFybS1lbGYtCmRpZmYgLS1naXQgYS9ib2FyZC9tb2RuZXQ1MC9mbGFzaC5jIGIvYm9hcmQvbW9kbmV0NTAvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzA0ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbW9kbmV0NTAvZmxhc2guYwpAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogTUFaZVQgR21iSCA8d3d3Lm1hemV0LmRlPgorICogU3RlcGhhbiBMaW56IDxsaW56QG1hemV0LmRlPiwgPGxpbnpAbGktcHJvLm5ldD4KKyAqCisgKiBUaGUgbW9zdCBzdHVmZiBjb21lcyBmcm9tIFBQQ0Jvb3QgYW5kIExpbnV4LgorICoKKyAqIElNTVMgZ0dtYkggPHd3dy5pbW1zLmRlPgorICogVGhvbWFzIEVsc3RlIDxpbmZvQGVsc3RlLm9yZz4KKyAqCisgKiBNb2RpZmljYXRpb25zIGZvciBNb2RORVQ1MCBCb2FyZAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9uZXRhcm1fcmVnaXN0ZXJzLmg+CisKKyNkZWZpbmUgU0NSICAgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKE5FVEFSTV9HRU5fTU9EVUxFX0JBU0UgKyBORVRBUk1fR0VOX1NZU1RFTV9DT05UUk9MKSkKKworI2RlZmluZSBBTElHTl9BQk9SVF9PRkYJCVNDUiA9IFNDUiAmIH5ORVRBUk1fR0VOX1NZU19DRkdfQUxJR05fQUJPUlQKKyNkZWZpbmUgQUxJR05fQUJPUlRfT04JCVNDUiA9IFNDUiB8ICBORVRBUk1fR0VOX1NZU19DRkdfQUxJR05fQUJPUlQKKworI2RlZmluZSBQUk9HX0FERFIJCSgweDU1NSoyKQorI2RlZmluZSBTRVRVUF9BRERSCQkoMHg1NTUqMikKKyNkZWZpbmUgSURfQUREUgkJCSgweDU1NSoyKQorI2RlZmluZSBVTkxPQ0tfQUREUjEJCSgweDU1NSoyKQorI2RlZmluZSBVTkxPQ0tfQUREUjIJCSgweDJBQSoyKQorCisjZGVmaW5lIFVOTE9DS19DTUQxCQkoMHhBQSkKKyNkZWZpbmUgVU5MT0NLX0NNRDIJCSgweDU1KQorI2RlZmluZSBFUkFTRV9TVVNQRU5EX0NNRAkoMHhCMCkKKyNkZWZpbmUgRVJBU0VfUkVTVU1FX0NNRAkoMHgzMCkKKyNkZWZpbmUgUkVTRVRfQ01ECQkoMHhGMCkKKyNkZWZpbmUgSURfQ01ECQkJKDB4OTApCisjZGVmaW5lIFNFQ0VSQVNFX0NNRAkJKDB4MzApCisjZGVmaW5lIENISVBFUkFTRV9DTUQJCSgweDEwKQorI2RlZmluZSBQUk9HX0NNRAkJKDB4YTApCisjZGVmaW5lIFNFVFVQX0NNRAkJKDB4ODApCisKKyNkZWZpbmUgRFEyCQkJKDB4MDQpCisjZGVmaW5lIERRMwkJCShEUTIqMikKKyNkZWZpbmUgRFE1CQkJKERRMyo0KQorI2RlZmluZSBEUTYJCQkoRFE1KjIpCisKKyNkZWZpbmUgV1JJVEVfVU5MT0NLKGFkZHIpIHsgXAorICAqKHZvbGF0aWxlIF9fdTE2KikoYWRkciArIFVOTE9DS19BRERSMSkgPSAoX191MTYpVU5MT0NLX0NNRDE7IFwKKyAgKih2b2xhdGlsZSBfX3UxNiopKGFkZHIgKyBVTkxPQ0tfQUREUjIpID0gKF9fdTE2KVVOTE9DS19DTUQyOyBcCit9CisKKyNkZWZpbmUgQ09ORklHX0FNMjlfUkVTRVJWRUQJKDApCisjZGVmaW5lIEsJCQkoMTAyNCkKKyNkZWZpbmUgTUIJCQkoNCkKKworI2RlZmluZSBDRUxMX1NJWkUJCSg2NCpLKQorI2RlZmluZSBERVZJQ0VfU0laRQkJKE1CKksqSykKKyNkZWZpbmUgQ0VMTFNfUEVSX0RFVklDRQkoREVWSUNFX1NJWkUvQ0VMTF9TSVpFKQorI2RlZmluZSBSRVNFUlZFRF9DRUxMUwkJKENPTkZJR19BTTI5X1JFU0VSVkVEKkspL0NFTExfU0laRQorI2RlZmluZSBNQVhfRkxBU0hfREVWSUNFUwkoMSkKKyNkZWZpbmUgQVZBSUxfU0laRQkJKERFVklDRV9TSVpFKk1BWF9GTEFTSF9ERVZJQ0VTIC0gUkVTRVJWRURfQ0VMTFMqQ0VMTF9TSVpFKQorCisKK2ZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOworc3RhdGljIF9fdTE2IHRvZ2dsaW5nX2JpdHM7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit1bG9uZyBmbGFzaF9nZXRfc2l6ZSAodWxvbmcgYmFzZWFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJc2hvcnQgaTsKKwlfX3UxNiBmbGFzaHRlc3Q7CisKKwkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kIHNlcXVlbmNlIGFuZCB0ZXN0IEZMQVNIIGFuc3dlciAqLworCVdSSVRFX1VOTE9DSyAoYmFzZWFkZHIpOworCSoodm9sYXRpbGUgX191MTYgKikgKGJhc2VhZGRyICsgSURfQUREUikgPSAoX191MTYpIElEX0NNRDsKKwlmbGFzaHRlc3QgLyogbWFudWZhY3R1cmVyIElEICovICA9ICoodm9sYXRpbGUgX191MTYgKikgKGJhc2VhZGRyKTsKKwkqKHZvbGF0aWxlIF9fdTE2ICopIChiYXNlYWRkciArIElEX0FERFIpID0gKF9fdTE2KSBSRVNFVF9DTUQ7CisKKwlzd2l0Y2ggKChfX3UzMikgKChmbGFzaHRlc3QgPDwgMTYpICsgZmxhc2h0ZXN0KSkgeworCWNhc2UgQU1EX01BTlVGQUNUOgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQgJiBGTEFTSF9WRU5ETUFTSzsKKwkJYnJlYWs7CisJY2FzZSBGVUpfTUFOVUZBQ1Q6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0ZVSiAmIEZMQVNIX1ZFTkRNQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CisJCWluZm8tPnNpemUgPSAwOworCQlyZXR1cm4gKDApOwkvKiBubyBvciB1bmtub3duIGZsYXNoICovCisJfQorCisJLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZCBzZXF1ZW5jZSBhbmQgdGVzdCBGTEFTSCBhbnN3ZXIgKi8KKwlXUklURV9VTkxPQ0sgKGJhc2VhZGRyKTsKKwkqKHZvbGF0aWxlIF9fdTE2ICopIChiYXNlYWRkciArIElEX0FERFIpID0gKF9fdTE2KSBJRF9DTUQ7CisJZmxhc2h0ZXN0IC8qIGRldmljZSBJRCAqLyAgPSAqKHZvbGF0aWxlIF9fdTE2ICopIChiYXNlYWRkciArIDIpOworCSoodm9sYXRpbGUgX191MTYgKikgKGJhc2VhZGRyICsgSURfQUREUikgPSAoX191MTYpIFJFU0VUX0NNRDsKKworCS8qIHRvZ2dsaW5nX2JpdHMgPSAoZmxhc2h0ZXN0ID09IFRPU0hJQkEpPyhEUTYpOihEUTJ8RFE2KTsgKi8KKwl0b2dnbGluZ19iaXRzID0gKERRMiB8IERRNik7CisKKwlzd2l0Y2ggKChfX3UzMikgKChmbGFzaHRlc3QgPDwgMTYpICsgZmxhc2h0ZXN0KSkgeworCWNhc2UgQU1EX0lEX0xWMTYwQjoKKwkJaW5mby0+Zmxhc2hfaWQgKz0KKwkJCShGTEFTSF9BTTE2MExWIHwgRkxBU0hfQU0xNjBCKSAmIEZMQVNIX1RZUEVNQVNLOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSBDRkdfTUFYX0ZMQVNIX1NFQ1Q7CisJCWluZm8tPnNpemUgPSBDRkdfRkxBU0hfU0laRTsKKwkJLyogMSoxNksgQm9vdCBCbG9jaworCQkgICAyKjhLIFBhcmFtZXRlciBCbG9jaworCQkgICAxKjMySyBTbWFsbCBNYWluIEJsb2NrICovCisJCWluZm8tPnN0YXJ0WzBdID0gYmFzZWFkZHI7CisJCWluZm8tPnN0YXJ0WzFdID0gYmFzZWFkZHIgKyAweDQwMDA7CisJCWluZm8tPnN0YXJ0WzJdID0gYmFzZWFkZHIgKyAweDYwMDA7CisJCWluZm8tPnN0YXJ0WzNdID0gYmFzZWFkZHIgKyAweDgwMDA7CisJCWZvciAoaSA9IDE7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKKwkJCWluZm8tPnN0YXJ0WzMgKyBpXSA9IGJhc2VhZGRyICsgaSAqIENGR19NQUlOX1NFQ1RfU0laRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlyZXR1cm4gKDApOwkvKiBubyBvciB1bmtub3duIGZsYXNoICovCisJfQorCisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQgc2VxdWVuY2UgYW5kIHRlc3QgRkxBU0ggYW5zd2VyICovCisJCVdSSVRFX1VOTE9DSyAoaW5mby0+c3RhcnRbaV0pOworCQkqKHZvbGF0aWxlIF9fdTE2ICopIChpbmZvLT5zdGFydFtpXSArIElEX0FERFIpID0gKF9fdTE2KSBJRF9DTUQ7CisJCWZsYXNodGVzdCAvKiBwcm90ZWN0ZWQgdmVyaWZ5ICovICA9ICoodm9sYXRpbGUgX191MTYgKikgKGluZm8tPnN0YXJ0W2ldICsgNCk7CisJCSoodm9sYXRpbGUgX191MTYgKikgKGluZm8tPnN0YXJ0W2ldICsgSURfQUREUikgPSAoX191MTYpIFJFU0VUX0NNRDsKKwkJaWYgKGZsYXNodGVzdCAmIDB4MDAwMSkgeworCQkJaW5mby0+cHJvdGVjdFtpXSA9IDE7CS8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KKwkJfSBlbHNlIHsKKwkJCWluZm8tPnByb3RlY3RbaV0gPSAwOworCQl9CisJfQorCXJldHVybiAoaW5mby0+c2l6ZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordWxvbmcgZmxhc2hfaW5pdCAodm9pZCkKK3sKKwl1bG9uZyBzaXplID0gMDsKKwlpbnQgaTsKKworCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7CisJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCX0KKworCS8qIFN0YXRpYyBGTEFTSCBCYW5rIGNvbmZpZ3VyYXRpb24gaGVyZSAob25seSBvbmUgYmFuaykgKi8KKwlzaXplID0gZmxhc2hfZ2V0X3NpemUgKENGR19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7CisKKwlpZiAoZmxhc2hfaW5mb1swXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOIHx8IHNpemUgPT0gMCkgeworCQlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAorCQkJc2l6ZSwgc2l6ZSA+PiAyMCk7CisJfQorCisJLyoKKwkgKiBwcm90ZWN0IG1vbml0b3IgYW5kIGVudmlyb25tZW50IHNlY3RvcnMKKwkgKi8KKwlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkgICAgICAgQ0ZHX0ZMQVNIX0JBU0UsCisJCSAgICAgICBDRkdfRkxBU0hfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkJICAgICAgICZmbGFzaF9pbmZvWzBdKTsKKworCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgICBDRkdfRU5WX0FERFIsCisJCSAgICAgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLCAmZmxhc2hfaW5mb1swXSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwljYXNlIEZMQVNIX01BTl9BTUQ6CisJCXByaW50ZiAoIkFNRCAiKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF9NQU5fRlVKOgorCQlwcmludGYgKCJGdWppdHN1ICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CisJY2FzZSBGTEFTSF9BTURMMzIzQjoKKwkJcHJpbnRmICgiMjlETDMyM0IgKDMyIE0sIGJvdHRvbSBzZWN0b3IpXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAoRkxBU0hfQU0xNjBMViB8IEZMQVNIX0FNMTYwQik6CisJCXByaW50ZiAoIjI5TFYxNjBCRSAoMU0geCAxNiwgYm90dG9tIHNlY3RvcilcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisJCWJyZWFrOworCX0KKworCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCisJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQlpZiAoKGkgJSA0KSA9PSAwKQorCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJcHJpbnRmICgiIFMlMDJkIEAgMHglMDhsWCVzIiwgaSwKKwkJCWluZm8tPnN0YXJ0W2ldLCBpbmZvLT5wcm90ZWN0W2ldID8gIiAhIiA6ICIgICIpOworCX0KKwlwcmludGYgKCJcbiIpOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQgZmxhc2hfY2hlY2tfcHJvdGVjdGlvbiAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCit7CisJaW50IHNlY3QsIHByb3QgPSAwOworCisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pCisJCQlwcm90Kys7CisJaWYgKHByb3QpCisJCXByaW50ZiAoIi0gY2FuJ3QgZXJhc2UgJWQgcHJvdGVjdGVkIHNlY3RvcnNcbiIsIHByb3QpOworCXJldHVybiBwcm90OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludCBmbGFzaF9jaGVja19lcmFzZV9hbWQgKHVsb25nIHN0YXJ0KQoreworCV9fdTE2IHYxLCB2MjsKKworCXYxID0gKih2b2xhdGlsZSBfX3UxNiAqKSAoc3RhcnQpOworCXYyID0gKih2b2xhdGlsZSBfX3UxNiAqKSAoc3RhcnQpOworCisJaWYgKCgodjEgXiB2MikgJiB0b2dnbGluZ19iaXRzKSA9PSB0b2dnbGluZ19iaXRzKSB7CisJCWlmICgoKHYxIHwgdjIpICYgRFE1KSA9PSBEUTUpIHsKKwkJCXByaW50ZiAoIltEUTVdICIpOworCQkJLyogT09QUzogZXhjZWVkZWQgdGltaW5nIGxpbWl0cyAqLworCisJCQl2MSA9ICoodm9sYXRpbGUgX191MTYgKikgKHN0YXJ0KTsKKwkJCXYyID0gKih2b2xhdGlsZSBfX3UxNiAqKSAoc3RhcnQpOworCisJCQlpZiAoKCh2MSBeIHYyKSAmIHRvZ2dsaW5nX2JpdHMpID09IHRvZ2dsaW5nX2JpdHMpIHsKKworCQkJCXByaW50ZiAoIlslc10gIiwKKwkJCQkJKCh0b2dnbGluZ19iaXRzICYgKERRMiB8IERRNikpID09CisJCQkJCSAoRFEyIHwgRFE2KSkgPyAiRFEyLERRNiIgOiAiRFE2Iik7CisKKwkJCQkvKiBPT1BTOiB0aGVyZSBpcyBhbiBlcmFzdXJlIGluIHByb2dyZXNzLAorCQkJCSAqICAgICAgIHRyeSB0byByZXNldCBjaGlwICovCisJCQkJKih2b2xhdGlsZSBfX3UxNiAqKSAoc3RhcnQpID0KKwkJCQkJKF9fdTE2KSBSRVNFVF9DTUQ7CisKKwkJCQlyZXR1cm4gMTsJLyogc3RpbGwgYnVzeSAqLworCQkJfQorCQl9CisJCXJldHVybiAxOwkvKiBzdGlsbCBidXN5ICovCisJfQorCXJldHVybiAwOwkJLyogYmUgZnJlZSAqLworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCit7CisJaW50IGZsYWcsIHNlY3QsIHNldHVwX29mZnNldCA9IDA7CisJaW50IHJjID0gRVJSX09LOworCisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEU7CisJfQorCisJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CisJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJCXJldHVybiBFUlJfSU5WQUw7CisJfQorCisJaWYgKGZsYXNoX2NoZWNrX3Byb3RlY3Rpb24gKGluZm8sIHNfZmlyc3QsIHNfbGFzdCkpCisJCXJldHVybiBFUlJfUFJPVEVDVEVEOworCisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7CisJY2FzZSBGTEFTSF9NQU5fRlVKOgorCWNhc2UgRkxBU0hfTUFOX0FNRDoKKwkJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CisJCWNhc2UgKEZMQVNIX0FNMTYwTFYgfCBGTEFTSF9BTTE2MEIpOgorCQkJc2V0dXBfb2Zmc2V0ID0gVU5MT0NLX0FERFIxOwkvKiBqdXN0IHRoZSBhZHJlc3MgZm9yIHNldHVwX2NtZCBkaWZmZXJzICovCisJCWNhc2UgRkxBU0hfQU1ETDMyM0I6CisJCQkvKiAKKwkJCSAqIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQKKwkJCSAqIGhlcmUuIFJlbWVtYmVyIHRoYXQgb3VyIGV4Y2VwdGlvbiB2ZWN0b3JzIGFyZQorCQkJICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQorCQkJICogKHRpY2tlcikgZXhjZXB0aW9uIHRvIGhhcHBlbiB3aGlsZSB0aGUgZmxhc2gKKwkJCSAqIGNoaXAgaXMgaW4gcHJvZ3JhbW1pbmcgbW9kZS4KKwkJCSAqLworCQkJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKwkJCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwkJCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0ICYmICFjdHJsYyAoKTsKKwkJCSAgICAgc2VjdCsrKSB7CisJCQkJcHJpbnRmICgiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0KTsKKworCQkJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsKKwkJCQkJLyogbm90IHByb3RlY3RlZCAqLworCQkJCQkvKiBXcml0ZSBzZWN0b3IgZXJhc2UgY29tbWFuZCBzZXF1ZW5jZSAqLworCQkJCQlXUklURV9VTkxPQ0sgKGluZm8tPnN0YXJ0WzBdKTsKKwkJCQkJKih2b2xhdGlsZSBfX3UxNiAqKSAoaW5mby0+c3RhcnRbMF0gKworCQkJCQkJCSAgICAgc2V0dXBfb2Zmc2V0KSA9CisJCQkJCQkoX191MTYpIFNFVFVQX0NNRDsKKwkJCQkJV1JJVEVfVU5MT0NLIChpbmZvLT5zdGFydFswXSk7CisJCQkJCSoodm9sYXRpbGUgX191MTYgKikgKGluZm8tPgorCQkJCQkJCSAgICAgc3RhcnRbc2VjdF0pID0KKwkJCQkJCShfX3UxNikgU0VDRVJBU0VfQ01EOworCisJCQkJCS8qIHdhaXQgc29tZSB0aW1lICovCisJCQkJCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKKwkJCQkJd2hpbGUgKGdldF90aW1lcl9tYXNrZWQgKCkgPCAxMDAwKSB7CisJCQkJCX0KKworCQkJCQkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLworCQkJCQlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisJCQkJCXdoaWxlIChmbGFzaF9jaGVja19lcmFzZV9hbWQgKGluZm8tPnN0YXJ0W3NlY3RdKSkgeworCQkJCQkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCQkJCXByaW50ZiAoInRpbWVvdXQhXG4iKTsKKwkJCQkJCQkvKiBPT1BTOiByZWFjaCB0aW1lb3V0LAorCQkJCQkJCSAqIHRyeSB0byByZXNldCBjaGlwCisJCQkJCQkJICovCisJCQkJCQkJKih2b2xhdGlsZSBfX3UxNiAqKSAoaW5mby0+IHN0YXJ0W3NlY3RdKSA9IChfX3UxNikgUkVTRVRfQ01EOworCQkJCQkJCXJjID0gRVJSX1RJTU9VVDsKKwkJCQkJCQlnb3RvIG91dGFoZXJlXzMyM0I7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJcHJpbnRmICgib2suXG4iKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGYgKCJwcm90ZWN0ZWQhXG4iKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoY3RybGMgKCkpCisJCQkJcHJpbnRmICgiVXNlciBJbnRlcnJ1cHQhXG4iKTsKK291dGFoZXJlXzMyM0I6CisJCQkvKiBhbGxvdyBmbGFzaCB0byBzZXR0bGUgLSB3YWl0IDEwIG1zICovCisJCQl1ZGVsYXlfbWFza2VkICgxMDAwMCk7CisJCQlpZiAoZmxhZykKKwkJCQllbmFibGVfaW50ZXJydXB0cyAoKTsKKwkJCXJldHVybiByYzsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZiAoIi0gdW5rbm93biBjaGlwIHR5cGVcbiIpOworCQkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEU7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiLSB1bmtub3duIHZlbmRvciAiKTsKKwkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1ZFTkRPUjsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50IGZsYXNoX2NoZWNrX3dyaXRlX2FtZCAodWxvbmcgZGVzdCkKK3sKKwlfX3UxNiB2MSwgdjI7CisKKwl2MSA9ICoodm9sYXRpbGUgX191MTYgKikgKGRlc3QpOworCXYyID0gKih2b2xhdGlsZSBfX3UxNiAqKSAoZGVzdCk7CisKKwkvKiBEUTYgdG9nZ2xlcyBkdXJpbmcgd3JpdGUgKi8KKwlpZiAoKCh2MSBeIHYyKSAmIERRNikgPT0gRFE2KSB7CisJCWlmICgoKHYxIHwgdjIpICYgRFE1KSA9PSBEUTUpIHsKKwkJCXByaW50ZiAoIltEUTVdIEAgJTA4bFhcbiIsIGRlc3QpOworCisJCQkvKiBPT1BTOiBleGNlZWRlZCB0aW1pbmcgbGltaXRzLAorCQkJICogICAgICAgdHJ5IHRvIHJlc2V0IGNoaXAgKi8KKwkJCSoodm9sYXRpbGUgX191MTYgKikgKGRlc3QpID0gKF9fdTE2KSBSRVNFVF9DTUQ7CisJCQlyZXR1cm4gMDsJLyogYmUgZnJlZSAqLworCQl9CisJCXJldHVybiAxOwkvKiBzdGlsbCBidXN5ICovCisJfQorCisJcmV0dXJuIDA7CQkvKiBiZSBmcmVlICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHkgbWVtb3J5IHRvIGZsYXNoCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfd29yZCAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdXNob3J0IGRhdGEpCit7CisJaW50IHJjID0gRVJSX09LOworCWludCBmbGFnOworCisJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisJaWYgKCgqKF9fdTE2ICopIChkZXN0KSAmIGRhdGEpICE9IGRhdGEpCisJCXJldHVybiBFUlJfTk9UX0VSQVNFRDsKKworCS8qIAorCSAqIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQKKwkgKiBoZXJlLiBSZW1lbWJlciB0aGF0IG91ciBleGNlcHRpb24gdmVjdG9ycyBhcmUKKwkgKiBhdCBhZGRyZXNzIDAgaW4gdGhlIGZsYXNoLCBhbmQgd2UgZG9uJ3Qgd2FudCBhCisJICogKHRpY2tlcikgZXhjZXB0aW9uIHRvIGhhcHBlbiB3aGlsZSB0aGUgZmxhc2gKKwkgKiBjaGlwIGlzIGluIHByb2dyYW1taW5nIG1vZGUuCisJICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCS8qIFdyaXRlIHByb2dyYW0gY29tbWFuZCBzZXF1ZW5jZSAqLworCVdSSVRFX1VOTE9DSyAoaW5mby0+c3RhcnRbMF0pOworCisJLyogRmxhc2ggZGVwZW5kZW5kIHByb2dyYW0gc2VxZW5jZSAqLworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgeworCWNhc2UgRkxBU0hfTUFOX0ZVSjoKKwljYXNlIEZMQVNIX01BTl9BTUQ6CisJCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgeworCQljYXNlIChGTEFTSF9BTTE2MExWIHwgRkxBU0hfQU0xNjBCKToKKwkJCSoodm9sYXRpbGUgX191MTYgKikgKGluZm8tPnN0YXJ0WzBdICsgVU5MT0NLX0FERFIxKSA9CisJCQkJKF9fdTE2KSBQUk9HX0NNRDsKKwkJCSoodm9sYXRpbGUgX191MTYgKikgKGRlc3QpID0gKF9fdTE2KSBkYXRhOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQU1ETDMyM0I6CisJCQkqKHZvbGF0aWxlIF9fdTE2ICopIChkZXN0KSA9IChfX3UxNikgUFJPR19DTUQ7CisJCQkqKHZvbGF0aWxlIF9fdTE2ICopIChkZXN0KSA9IChfX3UxNikgZGF0YTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisKKwl3aGlsZSAoZmxhc2hfY2hlY2tfd3JpdGVfYW1kIChkZXN0KSkgeworCQlpZiAoZ2V0X3RpbWVyX21hc2tlZCAoKSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCQlwcmludGYgKCJ0aW1lb3V0ISBAICUwOGxYXG4iLCBkZXN0KTsKKwkJCS8qIE9PUFM6IHJlYWNoIHRpbWVvdXQsCisJCQkgKiAgICAgICB0cnkgdG8gcmVzZXQgY2hpcCAqLworCQkJKih2b2xhdGlsZSBfX3UxNiAqKSAoZGVzdCkgPSAoX191MTYpIFJFU0VUX0NNRDsKKworCQkJcmMgPSBFUlJfVElNT1VUOworCQkJZ290byBvdXRhaGVyZV8zMjNCOworCQl9CisJfQorCisJLyogQ2hlY2sgaWYgRmxhc2ggd2FzIChhY2N1cmF0ZWx5KSB3cml0dGVuICovCisJaWYgKCooX191MTYgKikgKGRlc3QpICE9IGRhdGEpCisJCXJjID0gRVJSX1BST0dfRVJST1I7CisKK291dGFoZXJlXzMyM0I6CisJaWYgKGZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzICgpOworCXJldHVybiByYzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weSBtZW1vcnkgdG8gZmxhc2guCisgKi8KK2ludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQoreworCXVsb25nIGNwLCB3cDsKKwl1c2hvcnQgZGF0YTsKKwlpbnQgbDsKKwlpbnQgaSwgcmM7CisKKwl3cCA9IChhZGRyICYgfjEpOwkvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcworCSAqLworCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IGw7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCoodWNoYXIgKikgY3AgPDwgOCk7CisJCX0KKwkJZm9yICg7IGkgPCAyICYmIGNudCA+IDA7ICsraSkgeworCQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCpzcmMrKyA8PCA4KTsKKwkJCS0tY250OworCQkJKytjcDsKKwkJfQorCQlmb3IgKDsgY250ID09IDAgJiYgaSA8IDI7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCoodWNoYXIgKikgY3AgPDwgOCk7CisJCX0KKworCQlpZiAoKHJjID0gd3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQl3cCArPSAyOworCX0KKworCS8qCisJICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0CisJICovCisJd2hpbGUgKGNudCA+PSAyKSB7CisJCWRhdGEgPSAqKCh1c2hvcnQgKikgc3JjKTsKKwkJaWYgKChyYyA9IHdyaXRlX3dvcmQgKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkKKwkJCXJldHVybiAocmMpOworCQlzcmMgKz0gMjsKKwkJd3AgKz0gMjsKKwkJY250IC09IDI7CisJfQorCisJaWYgKGNudCA9PSAwKQorCQlyZXR1cm4gRVJSX09LOworCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKKwkgKi8KKwlkYXRhID0gMDsKKwlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgMiAmJiBjbnQgPiAwOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCpzcmMrKyA8PCA4KTsKKwkJLS1jbnQ7CisJfQorCWZvciAoOyBpIDwgMjsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopIGNwIDw8IDgpOworCX0KKworCXJldHVybiB3cml0ZV93b3JkIChpbmZvLCB3cCwgZGF0YSk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9tb2RuZXQ1MC9tZW1zZXR1cC5TIGIvYm9hcmQvbW9kbmV0NTAvbWVtc2V0dXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzRiMWQyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbW9kbmV0NTAvbWVtc2V0dXAuUwpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIE1lbW9yeSBTZXR1cCBzdHVmZiAtIHRha2VuIGZyb20gTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIJU3RlcGhhbiBMaW56IDxsaW56QG1hemV0LmRlPiwgPGxpbnpAbGktcHJvLm5ldD4KKyAqIChjKSAyMDA0IElNTVMgZ0dtYkggPHd3dy5pbW1zLmRlPiwgVGhvbWFzIEVsc3RlIDxpbmZvQGVsc3RlLm9yZz4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbmV0YXJtX3JlZ2lzdGVycy5oPgorCisKKy8qIHNvbWUgcGFyYW1ldGVycyBmb3IgdGhlIGJvYXJkICovCisjZGVmaW5lIEZMQVNIXzkwbnNfV0FJVF9TVEFURVMJKChORVRBUk1fUExMX0NPVU5UX1ZBTCArIDIpIC8gMykKKyNkZWZpbmUgRkxBU0hfNzBuc19XQUlUX1NUQVRFUwk0CisKKyNkZWZpbmUgTkVUQVJNX01NQVBfQ1MwX0JBU0UJKFBIWVNfRkxBU0hfMSkKKyNpZiAxCisjZGVmaW5lIE5FVEFSTV9NTUFQX0NTMF9NQVNLCSh+KFBIWVNfRkxBU0hfMV9TSVpFIC0gMSkpCisjZWxzZQorI2RlZmluZSBORVRBUk1fTU1BUF9DUzBfTUFTSwkofigxMDAwMDAwIC0gMSkpCisjZW5kaWYKKyNkZWZpbmUgTkVUQVJNX01NQVBfQ1MxX0JBU0UJKFBIWVNfU0RSQU1fMSkKKyNkZWZpbmUgTkVUQVJNX01NQVBfQ1MxX01BU0sJKH4oUEhZU19TRFJBTV8xX1NJWkUgLSAxKSkKKyNkZWZpbmUgTkVUQVJNX01NQVBfQ1MyX0JBU0UJKFBIWVNfU0RSQU1fMikKKyNkZWZpbmUgTkVUQVJNX01NQVBfQ1MyX01BU0sJKH4oUEhZU19TRFJBTV8yX1NJWkUgLSAxKSkKKyNpZiBkZWZpbmVkKENPTkZJR19ORVRBUk1fRUVQUk9NKSAmJiBkZWZpbmVkKFBIWVNfTlZSQU1fMSkgJiYgZGVmaW5lZChQSFlTX05WUkFNX1NJWkUpCisjZGVmaW5lIE5FVEFSTV9NTUFQX0NTM19CQVNFCShQSFlTX05WUkFNXzEpCisjZGVmaW5lIE5FVEFSTV9NTUFQX0NTM19NQVNLCSh+KFBIWVNfTlZSQU1fU0laRSAtIDEpKQorI2VuZGlmCisjZGVmaW5lIE5FVEFSTV9NTUFQX0NTNF9CQVNFCShQSFlTX0VYVF8xKQorI2RlZmluZSBORVRBUk1fTU1BUF9DUzRfTUFTSwkofihQSFlTX0VYVF9TSVpFIC0gMSkpCisKKy8qIHNldHRpbmcgdXAgdGhlIG1lbW9yeSAqLworLmdsb2JsIG1lbXNldHVwCittZW1zZXR1cDoKKworI2lmIGRlZmluZWQoQ09ORklHX01PRE5FVDUwKQorCWxkcglwYywgPShfanVtcF90b19oaWdoICsgTkVUQVJNX01NQVBfQ1MwX0JBU0UgLSBURVhUX0JBU0UpCisKK19qdW1wX3RvX2hpZ2g6CisJLyoKKwkgKiBNRU0gQ29uZmlnIFJlZworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCWxkcglyMCwgPU5FVEFSTV9NRU1fTU9EVUxFX0JBU0UKKwlsZHIJcjEsID0oCU5FVEFSTV9NRU1fUkVGUl9QRVJJT0RfVVNFQygxNikgfCBcCisJCQlORVRBUk1fTUVNX0NGR19SRUZSRVNIX0VOIHwgXAorCQkJTkVUQVJNX01FTV9DRkdfUkVGUl9DWUNMRV81Q0xLUyApCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX01FTV9NT0RVTEVfQ09ORklHXQorCisKK21lbXNldHVwX2NzMDoKKwkvKgorCSAqIEJhc2UgQWRkciAvIE9wdGlvbiBSZWcgMCAoRmxhc2gpCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisJbGRyCXIxLCA9KAlORVRBUk1fTUVNX0JBUl9CQVNFKE5FVEFSTV9NTUFQX0NTMF9CQVNFKSB8IFwKKwkJCU5FVEFSTV9NRU1fQkFSX0RSQU1fRlAgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX01VWF9JTlQgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX01VWF9CQUwgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9WQUxJRCApCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX01FTV9DUzBfQkFTRV9BRERSXQorCisJLyogdHJ1c3QgdGhhdCB0aGUgYnVzIHNpemUgZm9yIGZsYXNoIHdhcyBzdHJhcHBlZCBjb3JyZWN0bHkgKi8KKwkvKiB0aGlzIHNhdmVzIHRoZSBidXMgd2lkdGggaW4gcjIgYW5kIHRoZW4gT1JzIGl0IGJhY2sgaW4gKi8KKwkvKiBpdCdzIHByZXR0eSBzYWZlIGFzc3VtcHRpb24sIG90aGVyd2lzZSBpdCB3b3VsZG4ndCBib290ICovCisJbGRyCXIyLCBbcjAsICMrTkVUQVJNX01FTV9DUzBfT1BUSU9OU10KKwlhbmQJcjIsIHIyLCAjTkVUQVJNX01FTV9PUFRfQlVTX1NJWkVfTUFTSworCisvKglqdXN0IGEgdGVzdDogYXNzdW1lIDMyIGJpdCBmbGFzaCBtZW0gKi8KKy8qCW1vdglyMiwgI05FVEFSTV9NRU1fT1BUXzMyQklUICovCisKKwlsZHIJcjEsID0oCU5FVEFSTV9NRU1fT1BUX0JBU0VfVVNFKE5FVEFSTV9NTUFQX0NTMF9NQVNLKSB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX1dBSVRfU1RBVEVTKEZMQVNIXzcwbnNfV0FJVF9TVEFURVMpIHwgXAorCQkJTkVUQVJNX01FTV9PUFRfQkNZQ180IHwgXAorCQkJTkVUQVJNX01FTV9PUFRfQlNJWkVfMTYgfCBcCisJCQlORVRBUk1fTUVNX09QVF8xNkJJVCB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX1JFQURfQVNZTkMgfCBcCisJCQlORVRBUk1fTUVNX09QVF9XUklURV9BU1lOQyApCisKKwlvcnIJcjEsIHIxLCByMgorCXN0cglyMSwgW3IwLCAjK05FVEFSTV9NRU1fQ1MwX09QVElPTlNdCisKKworbWVtc2V0dXBfY3MxOgorCS8qCisJICogQmFzZSBBZGRyIC8gT3B0aW9uIFJlZyAxIChEUkFNICMxKQorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworI2lmZGVmIENPTkZJR19ORVRBUk1fTkVUNDBfUkVWMgorCS8qIHdlIGhhdmUgdG8gY29uZmlnIFNEUkFNIGluIGJ1cnN0IG1vZGUgKi8KKwlsZHIJcjEsID0oCU5FVEFSTV9NRU1fT1BUX0JBU0VfVVNFKE5FVEFSTV9NTUFQX0NTMV9NQVNLKSB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX0JDWUNfMiB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX0JTSVpFXzE2IHwgXAorCQkJTkVUQVJNX01FTV9PUFRfV0FJVF9TVEFURVMoMCkgfCBcCisJCQlORVRBUk1fTUVNX09QVF8zMkJJVCB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX1JFQURfQVNZTkMgfCBcCisJCQlORVRBUk1fTUVNX09QVF9XUklURV9BU1lOQyApCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX01FTV9DUzFfT1BUSU9OU10KKworCWxkcglyMSwgPSgJTkVUQVJNX01FTV9CQVJfQkFTRShORVRBUk1fTU1BUF9DUzFfQkFTRSkgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX1NZTkMgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX01VWF9JTlQgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX01VWF9VTkJBTCB8IFwKKwkJCU5FVEFSTV9NRU1fQkFSX0RSQU1fU0VMIHwgXAorCQkJTkVUQVJNX01FTV9CQVJfQlVSU1RfRU4gfCBcCisJCQlORVRBUk1fTUVNX0JBUl9WQUxJRCApCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX01FTV9DUzFfQkFTRV9BRERSXQorI2Vsc2UKKwkvKiB3ZSBoYXZlIHRvIGNvbmZpZyBGUERSQU0gaW4gYnVyc3QgbW9kZSB3aXRoIHNtYWxsZXIgYnVyc3QgYWNjZXNzIHNpemUgKi8KKwlsZHIJcjEsID0oCU5FVEFSTV9NRU1fT1BUX0JBU0VfVVNFKE5FVEFSTV9NTUFQX0NTMV9NQVNLKSB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX0JDWUNfMiB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX0JTSVpFXzE2IHwgXAorCQkJTkVUQVJNX01FTV9PUFRfV0FJVF9TVEFURVMoMCkgfCBcCisJCQlORVRBUk1fTUVNX09QVF8zMkJJVCB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX1JFQURfQVNZTkMgfCBcCisJCQlORVRBUk1fTUVNX09QVF9XUklURV9BU1lOQyApCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX01FTV9DUzFfT1BUSU9OU10KKworCWxkcglyMSwgPSgJTkVUQVJNX01FTV9CQVJfQkFTRShORVRBUk1fTU1BUF9DUzFfQkFTRSkgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX1NZTkMgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX01VWF9JTlQgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX01VWF9VTkJBTCB8IFwKKwkJCU5FVEFSTV9NRU1fQkFSX0RSQU1fU0VMIHwgXAorCQkJTkVUQVJNX01FTV9CQVJfQlVSU1RfRU4gfCBcCisJCQlORVRBUk1fTUVNX0JBUl9WQUxJRCApCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX01FTV9DUzFfQkFTRV9BRERSXQorCisjZW5kaWYgLyogQ09ORklHX05FVEFSTV9ORVQ0MF9SRVYyICovCisKKworbWVtc2V0dXBfY3MzOgorCS8qCisJICogQmFzZSBBZGRyIC8gT3B0aW9uIFJlZyAzIChFRVBST00sIE5WUkFNKQorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworI2lmIGRlZmluZWQoQ09ORklHX05FVEFSTV9FRVBST00pICYmIGRlZmluZWQoUEhZU19OVlJBTV8xKSAmJiBkZWZpbmVkKFBIWVNfTlZSQU1fU0laRSkKKwlsZHIJcjEsID0oCU5FVEFSTV9NRU1fT1BUX0JBU0VfVVNFKE5FVEFSTV9NTUFQX0NTM19NQVNLKSB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX0JDWUNfMyB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX0JTSVpFXzIgfCBcCisJCQlORVRBUk1fTUVNX09QVF9XQUlUX1NUQVRFUygxMCkgfCBcCisJCQlORVRBUk1fTUVNX09QVF84QklUIHwgXAorCQkJTkVUQVJNX01FTV9PUFRfUkVBRF9BU1lOQyB8IFwKKwkJCU5FVEFSTV9NRU1fT1BUX1dSSVRFX0FTWU5DICkKKwlzdHIJcjEsIFtyMCwgIytORVRBUk1fTUVNX0NTM19PUFRJT05TXQorCisJbGRyCXIxLCA9KAlORVRBUk1fTUVNX0JBUl9CQVNFKE5FVEFSTV9NTUFQX0NTM19CQVNFKSB8IFwKKwkJCU5FVEFSTV9NRU1fQkFSX0RSQU1fRlAgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX01VWF9JTlQgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9EUkFNX01VWF9CQUwgfCBcCisJCQlORVRBUk1fTUVNX0JBUl9WQUxJRCApCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX01FTV9DUzNfQkFTRV9BRERSXQorI2Vsc2UKKwkvKiB3ZSBkb24ndCBuZWVkIEVFUFJPTSAtLT4gbm8gY29uZmlnICovCisJbGRyCXIxLCA9KCAwICkKKwlzdHIJcjEsIFtyMCwgIytORVRBUk1fTUVNX0NTM19PUFRJT05TXQorCisJbGRyCXIxLCA9KCAwICkKKwlzdHIJcjEsIFtyMCwgIytORVRBUk1fTUVNX0NTM19CQVNFX0FERFJdCisjZW5kaWYKKworCisjZWxzZQorLyoKKyNlcnJvciAibWlzc2luZyBDT05GSUdfTU9ETkVUNTAgKHNlZSB5b3VyIGNvbmZpZy5oKSIKKyovCisjZW5kaWYgLyogQ09ORklHX01PRE5FVDUwICovCisKKworbWVtc2V0dXBfZW5kOgorCS8qCisJICogbWFuaXB1bGF0ZSBhZGRyZXNzIGluIGxyIGFuZCBpcCB0byBtYXRjaCBuZXcKKwkgKiBhZGRyZXNzIHNwYWNlCisJICovCisJbGRyCXIzLCA9KE5FVEFSTV9NTUFQX0NTMF9CQVNFKQorCW1vdglyMCwgbHIKKwlhZGQJcjAsIHIzLCByMAorCW1vdglsciwgcjAKKwltb3YJcjAsIGlwCisJYWRkCXIwLCByMywgcjAKKwltb3YJaXAsIHIwCisKKwkvKiBldmVyeXRoaW5nIGlzIGZpbmUgbm93ICovCisJbW92CXBjLCBscgpkaWZmIC0tZ2l0IGEvYm9hcmQvbW9kbmV0NTAvbW9kbmV0NTAuYyBiL2JvYXJkL21vZG5ldDUwL21vZG5ldDUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4YzYyMwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21vZG5ldDUwL21vZG5ldDUwLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyoKKyAqIE1pc2NlbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGlzYXRpb25zCisgKi8KKworaW50IGJvYXJkX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisJLyogYWRkcmVzcyBmb3IgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gMHg4MDA7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7CisJaWYgKENPTkZJR19OUl9EUkFNX0JBTktTID09IDIpIHsKKwkJZ2QtPmJkLT5iaV9kcmFtWzFdLnN0YXJ0ID0gUEhZU19TRFJBTV8yOworCQlnZC0+YmQtPmJpX2RyYW1bMV0uc2l6ZSA9IFBIWVNfU0RSQU1fMl9TSVpFOworCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbW9kbmV0NTAvdS1ib290LmxkcyBiL2JvYXJkL21vZG5ldDUwL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwOWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21vZG5ldDUwL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgICAgICA6CisJeworCSAgY3B1L2FybTcyMHQvc3RhcnQubwkoLnRleHQpCisJICAqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAgICovCisgICAgICAgIC5zdGFiIDAgOiB7ICooLnN0YWIpIH0KKyAgICAgICAgLnN0YWJzdHIgMCA6IHsgKiguc3RhYnN0cikgfQorICAgICAgICAuc3RhYi5leGNsIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAgICAgICAuc3RhYi5leGNsc3RyIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAgICAgICAuc3RhYi5pbmRleCAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgICAgICAgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgICAgICAgLmNvbW1lbnQgMCA6IHsgKiguY29tbWVudCkgfQorICAgICAgICAuZGVidWdfYWJicmV2IDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAgICAgICAuZGVidWdfaW5mbyAwIDogeyAqKC5kZWJ1Z19pbmZvKSB9CisgICAgICAgIC5kZWJ1Z19saW5lIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgICAgICAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgICAgICAgIC5kZWJ1Z19hcmFuZ2VzIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KK30KZGlmZiAtLWdpdCBhL2NvbW1vbi9NYWtlZmlsZSBiL2NvbW1vbi9NYWtlZmlsZQppbmRleCA2NmNiOWVkLi5lY2NiNGU0IDEwMDY0NAotLS0gYS9jb21tb24vTWFrZWZpbGUKKysrIGIvY29tbW9uL01ha2VmaWxlCkBAIC0zNCw3ICszNCw3IEBACiAJICBjbWRfZGF0ZS5vIGNtZF9kY3IubyBjbWRfZGlhZy5vIGNtZF9kb2MubyBjbWRfZHR0Lm8gXAogCSAgY21kX2VlcHJvbS5vIGNtZF9lbGYubyBcCiAJICBjbWRfZmF0Lm8gY21kX2ZkYy5vIGNtZF9mZG9zLm8gY21kX2ZsYXNoLm8gY21kX2ZwZ2EubyBcCi0JICBjbWRfaTJjLm8gY21kX2lkZS5vIGNtZF9pbW1hcC5vIGNtZF9qZmZzMi5vIFwKKwkgIGNtZF9pMmMubyBjbWRfaWRlLm8gY21kX2ltbWFwLm8gY21kX2l0ZXN0Lm8gY21kX2pmZnMyLm8gXAogCSAgY21kX2xvYWQubyBjbWRfbG9nLm8gXAogCSAgY21kX21lbS5vIGNtZF9taWkubyBjbWRfbWlzYy5vIGNtZF9tbWMubyBcCiAJICBjbWRfbmFuZC5vIGNtZF9uZXQubyBjbWRfbnZlZGl0Lm8gXApAQCAtNDQsMTAgKzQ0LDEwIEBACiAJICBlbnZpcm9ubWVudC5vIGVudl9jb21tb24ubyBcCiAJICBlbnZfZGF0YWZsYXNoLm8gZW52X2ZsYXNoLm8gZW52X2VlcHJvbS5vIGVudl9udnJhbS5vIGVudl9ub3doZXJlLm8gZXhwb3J0cy5vIFwKIAkgIGZsYXNoLm8gZnBnYS5vIFwKLQkgIGh1c2gubyBrZ2RiLm8gbGlzdHMubyBseW54a2RpLm8gbWlpcGh5YmIubyBtaWlwaHl1dGlsLm8gXAorCSAgaHVzaC5vIGtnZGIubyBsaXN0cy5vIGx5bnhrZGkubyBtZW1zaXplLm8gbWlpcGh5YmIubyBtaWlwaHl1dGlsLm8gXAogCSAgc19yZWNvcmQubyBzb2Z0X2kyYy5vIHNvZnRfc3BpLm8gc3BhcnRhbjIubyBcCiAJICB1c2IubyB1c2Jfa2JkLm8gdXNiX3N0b3JhZ2UubyBcCi0JICB2aXJ0ZXgyLm8geGlsaW54Lm8gbWVtc2l6ZS5vCisJICB2aXJ0ZXgyLm8geGlsaW54Lm8KIAogT0JKUwk9ICQoQU9CSlMpICQoQ09CSlMpCiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfaXRlc3QuYyBiL2NvbW1vbi9jbWRfaXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTkyMGM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2NtZF9pdGVzdC5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBUYWl0IEVsZWN0cm9uaWNzIExpbWl0ZWQsIENocmlzdGNodXJjaCwgTmV3IFplYWxhbmQKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIGEgc2hlbGwgbGlrZSAndGVzdCcgZnVuY3Rpb24gdG8gcmV0dXJuCisgKiB0cnVlL2ZhbHNlIGZyb20gYW4gaW50ZWdlciBvciBzdHJpbmcgY29tcGFyZSBvZiB0d28gbWVtb3J5CisgKiBsb2NhdGlvbnMgb3IgYSBsb2NhdGlvbiBhbmQgYSBzY2FsYXIvbGl0ZXJhbC4KKyAqIEEgZmV3IHBhcnRzIHdlcmUgbGlmdGVkIGZyb20gYmFzaCAndGVzdCcgY29tbWFuZAorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisKKyNkZWZpbmUgRVEJMAorI2RlZmluZSBORQkxCisjZGVmaW5lIExUCTIKKyNkZWZpbmUgR1QJMworI2RlZmluZSBMRQk0CisjZGVmaW5lIEdFCTUKKworc3RydWN0IG9wX3RibF9zIHsKKwljaGFyCSpvcDsJCS8qIG9wZXJhdG9yIHN0cmluZyAqLworCWludAlvcGNvZGU7CQkvKiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBvcGNvZGUgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IG9wX3RibF9zIG9wX3RibF90OworCitvcF90YmxfdCBvcF90YWJsZSBbXSA9IHsKKwl7ICItbHQiLCBMVCB9LAorCXsgIjwiICAsIExUIH0sCisJeyAiLWd0IiwgR1QgfSwKKwl7ICI+IiAgLCBHVCB9LAorCXsgIi1lcSIsIEVRIH0sCisJeyAiPT0iICwgRVEgfSwKKwl7ICItbmUiLCBORSB9LAorCXsgIiE9IiAsIE5FIH0sCisJeyAiPD4iICwgTkUgfSwKKwl7ICItZ2UiLCBHRSB9LAorCXsgIj49IiAsIEdFIH0sCisJeyAiLWxlIiwgTEUgfSwKKwl7ICI8PSIgLCBMRSB9LAorfTsKKworI2RlZmluZSBvcF90Ymxfc2l6ZSAoc2l6ZW9mKG9wX3RhYmxlKS9zaXplb2Yob3BfdGFibGVbMF0pKQorCitleHRlcm4gaW50IGNtZF9nZXRfZGF0YV9zaXplKGNoYXIqIGFyZywgaW50IGRlZmF1bHRfc2l6ZSk7CisKK3N0YXRpYyBsb25nIGV2YWxleHAoY2hhciAqcywgaW50IHcpCit7CisJbG9uZyBsLCAqcDsKKworCS8qIGlmIHRoZSBwYXJhbWV0ZXIgc3RhcnRzIHdpdGggYSAqIHRoZW4gYXNzdW1lIGlzIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgd2Ugd2FudCAqLworCWlmIChzWzBdID09ICcqJykgeworCQlwID0gKGxvbmcgKilzaW1wbGVfc3RydG91bCgmc1sxXSwgTlVMTCwgMTYpOworCQlsID0gKnA7CisJfSBlbHNlIHsKKwkJbCA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDE2KTsKKwl9CisKKwlyZXR1cm4gKGwgJiAoKDEgPDwgKHcgKiA4KSkgLSAxKSk7Cit9CisKK3N0YXRpYyBjaGFyICogZXZhbHN0cihjaGFyICpzKQoreworCS8qIGlmIHRoZSBwYXJhbWV0ZXIgc3RhcnRzIHdpdGggYSAqIHRoZW4gYXNzdW1lIGEgc3RyaW5nIHBvaW50ZXIgZWxzZSBpdHMgYSBsaXRlcmFsICovCisJaWYgKHNbMF0gPT0gJyonKSB7CisJCXJldHVybiAoY2hhciAqKXNpbXBsZV9zdHJ0b3VsKCZzWzFdLCBOVUxMLCAxNik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHM7CisJfQorfQorCitzdGF0aWMgaW50IHN0cmluZ2NvbXAoY2hhciAqcywgY2hhciAqdCwgaW50IG9wKQoreworCWludCBuLCBwOworCWNoYXIgKmwsICpyOworCisJbCA9IGV2YWxzdHIocyk7CisJciA9IGV2YWxzdHIodCk7CisKKwkvKiB3ZSdsbCBkbyBhIGNvbXBhcmUgYmFzZWQgb24gdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlc3Qgc3RyaW5nICovCisJbiA9IG1pbihzdHJsZW4obCksIHN0cmxlbihyKSk7CisKKwlwID0gc3RybmNtcChsLCByLCBuKTsKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBFUTogcmV0dXJuIChwID09IDApOworCWNhc2UgTkU6IHJldHVybiAocCAhPSAwKTsKKwljYXNlIExUOiByZXR1cm4gKHAgPCAwKTsKKwljYXNlIEdUOiByZXR1cm4gKHAgPiAwKTsKKwljYXNlIExFOiByZXR1cm4gKHAgPD0gMCk7CisJY2FzZSBHRTogcmV0dXJuIChwID49IDApOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50IGFyaXRoY29tcCAoY2hhciAqcywgY2hhciAqdCwgaW50IG9wLCBpbnQgdykKK3sKKwlsb25nIGwsIHI7CisKKwlsID0gZXZhbGV4cCAocywgdyk7CisJciA9IGV2YWxleHAgKHQsIHcpOworCisJc3dpdGNoIChvcCkgeworCWNhc2UgRVE6IHJldHVybiAobCA9PSByKTsKKwljYXNlIE5FOiByZXR1cm4gKGwgIT0gcik7CisJY2FzZSBMVDogcmV0dXJuIChsIDwgcik7CisJY2FzZSBHVDogcmV0dXJuIChsID4gcik7CisJY2FzZSBMRTogcmV0dXJuIChsIDw9IHIpOworCWNhc2UgR0U6IHJldHVybiAobCA+PSByKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworaW50IGJpbmFyeV90ZXN0IChjaGFyICpvcCwgY2hhciAqYXJnMSwgY2hhciAqYXJnMiwgaW50IHcpCit7CisJaW50IGxlbiwgaTsKKwlvcF90YmxfdCAqb3B0cDsKKworCWxlbiA9IHN0cmxlbihvcCk7CisKKwlmb3IgKG9wdHAgPSAob3BfdGJsX3QgKikmb3BfdGFibGUsIGkgPSAwOworCSAgICAgaSA8IG9wX3RibF9zaXplOworCSAgICAgb3B0cCsrLCBpKyspIHsKKworCQlpZiAoKHN0cm5jbXAgKG9wLCBvcHRwLT5vcCwgbGVuKSA9PSAwKSAmJiAobGVuID09IHN0cmxlbiAob3B0cC0+b3ApKSkgeworCQkJaWYgKHcgPT0gMCkgeworCQkJCXJldHVybiAoc3RyaW5nY29tcChhcmcxLCBhcmcyLCBvcHRwLT5vcGNvZGUpKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIChhcml0aGNvbXAgKGFyZzEsIGFyZzIsIG9wdHAtPm9wY29kZSwgdykpOworCQkJfQorCQl9CisJfQorCisJcHJpbnRmKCJVbmtub3duIG9wZXJhdG9yICclcydcbiIsIG9wKTsKKwlyZXR1cm4gMDsJLyogb3AgY29kZSBub3QgZm91bmQgKi8KK30KKworLyogY29tbWFuZCBsaW5lIGludGVyZmFjZSB0byB0aGUgc2hlbGwgdGVzdCAqLworaW50IGRvX2l0ZXN0ICggY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgICAgICBpbnQJdmFsdWUsIHc7CisKKyAgICAgICAgLyogVmFsaWRhdGUgYXJndW1lbnRzICovCisgICAgICAgIGlmICgoYXJnYyAhPSA0KSl7CisJCXByaW50ZigiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKKyAgICAgICAgCXJldHVybiAxOworICAgICAgICB9CisKKwkvKiBDaGVjayBmb3IgYSBkYXRhIHdpZHRoIHNwZWNpZmljYXRpb24uCisJICogRGVmYXVsdHMgdG8gbG9uZyAoNCkgaWYgbm8gc3BlY2lmaWNhdGlvbi4KKwkgKiBVc2VzIC0yIGFzICd3aWR0aCcgZm9yIC5zIChzdHJpbmcpIHNvIGFzIG5vdCB0byB1cHNldCBleGlzdGluZyBjb2RlCisJICovCisJc3dpdGNoICh3ID0gY21kX2dldF9kYXRhX3NpemUoYXJndlswXSwgNCkpIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwkJdmFsdWUgPSBiaW5hcnlfdGVzdCAoYXJndlsyXSwgYXJndlsxXSwgYXJndlszXSwgdyk7CisJCWJyZWFrOworCWNhc2UgLTI6CisJCXZhbHVlID0gYmluYXJ5X3Rlc3QgKGFyZ3ZbMl0sIGFyZ3ZbMV0sIGFyZ3ZbM10sIDApOworCQlicmVhazsKKwljYXNlIC0xOgorCWRlZmF1bHQ6CisJCXB1dHMoIkludmFsaWQgZGF0YSB3aWR0aCBzcGVjaWZpZXJcbiIpOworCQl2YWx1ZSA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiAhdmFsdWU7Cit9CisKK1VfQk9PVF9DTUQoCisJaXRlc3QsIDQsIDAsIGRvX2l0ZXN0LAorCSJpdGVzdCAgIC0gcmV0dXJuIHRydWUvZmFsc2Ugb24gaW50ZWdlciBjb21wYXJlXG4iLAorCSJbLmIsIC53LCAubCwgLnNdIFsqXXZhbHVlMSA8b3A+IFsqXXZhbHVlMlxuIgorKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbWVtLmMgYi9jb21tb24vY21kX21lbS5jCmluZGV4IDZjY2FkNzAuLjBhNWNjYTkgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfbWVtLmMKKysrIGIvY29tbW9uL2NtZF9tZW0uYwpAQCAtNTMsNiArNTMsOCBAQAogCQkJcmV0dXJuIDI7CiAJCWNhc2UgJ2wnOgogCQkJcmV0dXJuIDQ7CisJCWNhc2UgJ3MnOgorCQkJcmV0dXJuIC0yOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC0xOwogCQl9CmRpZmYgLS1naXQgYS9jb21tb24vaHVzaC5jIGIvY29tbW9uL2h1c2guYwppbmRleCA3ZThhODBkLi40NzEyYWRjIDEwMDY0NAotLS0gYS9jb21tb24vaHVzaC5jCisrKyBiL2NvbW1vbi9odXNoLmMKQEAgLTIxNzMsNyArMjE3Myw3IEBACiAjaWZkZWYgX19VX0JPT1RfXwogCWlmIChnZXRlbnYobmFtZSkgIT0gTlVMTCkgewogCQlwcmludGYgKCJFUlJPUjogIgotCQkJCSJUaGVyZSBpcyBhIGdsb2JhbCBlbnZpcm9ubWV0IHZhcmlhYmxlIHdpdGggdGhlIHNhbWUgbmFtZS5cbiIpOworCQkJCSJUaGVyZSBpcyBhIGdsb2JhbCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L2FybTcyMHQvTWFrZWZpbGUgYi9jcHUvYXJtNzIwdC9NYWtlZmlsZQppbmRleCA4Yzk1MGRhLi5mMjczZDkyIDEwMDY0NAotLS0gYS9jcHUvYXJtNzIwdC9NYWtlZmlsZQorKysgYi9jcHUvYXJtNzIwdC9NYWtlZmlsZQpAQCAtMjYsNyArMjYsNyBAQAogTElCCT0gbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vCi1PQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vCitPQkpTCT0gc2VyaWFsLm8gc2VyaWFsX25ldGFybS5vIGludGVycnVwdHMubyBjcHUubwogCiBhbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKZGlmZiAtLWdpdCBhL2NwdS9hcm03MjB0L2NwdS5jIGIvY3B1L2FybTcyMHQvY3B1LmMKaW5kZXggNTYzN2ViNi4uMGFkNTQ4MSAxMDA2NDQKLS0tIGEvY3B1L2FybTcyMHQvY3B1LmMKKysrIGIvY3B1L2FybTcyMHQvY3B1LmMKQEAgLTEwNiw3ICsxMDYsOSBAQAogCXVuc2lnbmVkIGxvbmcgaTsKIAogCWRpc2FibGVfaW50ZXJydXB0cyAoKTsKLQorI2lmZGVmIENPTkZJR19ORVRBUk0KKwlyZXR1cm4gMDsKKyNlbmRpZgogCS8qIHR1cm4gb2ZmIEktY2FjaGUgKi8KIAlhc20gKCJtcmMgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIjoiPXIiIChpKSk7CiAJaSAmPSB+MHgxMDAwOwpkaWZmIC0tZ2l0IGEvY3B1L2FybTcyMHQvaW50ZXJydXB0cy5jIGIvY3B1L2FybTcyMHQvaW50ZXJydXB0cy5jCmluZGV4IGIxZWUxODguLjAyOTExOTMgMTAwNjQ0Ci0tLSBhL2NwdS9hcm03MjB0L2ludGVycnVwdHMuYworKysgYi9jcHUvYXJtNzIwdC9pbnRlcnJ1cHRzLmMKQEAgLTMwLDE0ICszMCwyNCBAQAogI2luY2x1ZGUgPGNscHM3MTExLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvYy1hcm12L3B0cmFjZS5oPgorI2lmZGVmIENPTkZJR19ORVRBUk0KKyNpbmNsdWRlIDxhc20vYXJjaC9uZXRhcm1fcmVnaXN0ZXJzLmg+CisjZW5kaWYKIAogZXh0ZXJuIHZvaWQgcmVzZXRfY3B1KHVsb25nIGFkZHIpOwogCisjaWZuZGVmIENPTkZJR19ORVRBUk0KIC8qIHdlIGFsd2F5cyBjb3VudCBkb3duIHRoZSBtYXguICovCiAjZGVmaW5lIFRJTUVSX0xPQURfVkFMIDB4ZmZmZgotCiAvKiBtYWNybyB0byByZWFkIHRoZSAxNiBiaXQgdGltZXIgKi8KICNkZWZpbmUgUkVBRF9USU1FUiAoSU9fVEMxRCAmIDB4ZmZmZikKKyNlbHNlCisjZGVmaW5lIElSUUVOCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShORVRBUk1fR0VOX01PRFVMRV9CQVNFICsgTkVUQVJNX0dFTl9JTlRSX0VOQUJMRSkpCisjZGVmaW5lIFRNMkNUUkwJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKE5FVEFSTV9HRU5fTU9EVUxFX0JBU0UgKyBORVRBUk1fR0VOX1RJTUVSMl9DT05UUk9MKSkKKyNkZWZpbmUgVE0yU1RBVAkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoTkVUQVJNX0dFTl9NT0RVTEVfQkFTRSArIE5FVEFSTV9HRU5fVElNRVIyX1NUQVRVUykpCisjZGVmaW5lIFRJTUVSX0xPQURfVkFMIE5FVEFSTV9HRU5fVFNUQVRfQ1RDX01BU0sKKyNkZWZpbmUgUkVBRF9USU1FUiAoVE0yU1RBVCAmIE5FVEFSTV9HRU5fVFNUQVRfQ1RDX01BU0spCisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19VU0VfSVJRCiAvKiBlbmFibGUgSVJRL0ZJUSBpbnRlcnJ1cHRzICovCkBAIC0xNzcsNiArMTg3LDE4IEBACiAKIGludCBpbnRlcnJ1cHRfaW5pdCAodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfTkVUQVJNCisgICAgICAgIC8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlJUlFFTiA9IDA7CisKKwkvKiBvcGVyYXRlIHRpbWVyIDIgaW4gbm9uLXByZXNjYWxlIG1vZGUgKi8KKwlUTTJDVFJMID0gKCBORVRBUk1fR0VOX1RJTUVSX1NFVF9IWihDRkdfSFopIHwKKwkJICAgIE5FVEFSTV9HRU5fVENUTF9FTkFCTEUgfAorCQkgICAgTkVUQVJNX0dFTl9UQ1RMX0lOSVRfQ09VTlQoVElNRVJfTE9BRF9WQUwpKTsKKworCS8qIHNldCB0aW1lciAyIGNvdW50ZXIgKi8KKwlsYXN0ZGVjID0gVElNRVJfTE9BRF9WQUw7CisjZWxzZQogCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAlJT19JTlRNUjEgPSAwOwogCkBAIC0xODgsNiArMjEwLDcgQEAKIAogCS8qIHNldCB0aW1lciAxIGNvdW50ZXIgKi8KIAlsYXN0ZGVjID0gSU9fVEMxRCA9IFRJTUVSX0xPQURfVkFMOworI2VuZGlmCiAJdGltZXN0YW1wID0gMDsKIAogCXJldHVybiAoMCk7CmRpZmYgLS1naXQgYS9jcHUvYXJtNzIwdC9zZXJpYWwuYyBiL2NwdS9hcm03MjB0L3NlcmlhbC5jCmluZGV4IGQzOGFjMzkuLjVjNmEwY2MgMTAwNjQ0Ci0tLSBhL2NwdS9hcm03MjB0L3NlcmlhbC5jCisrKyBiL2NwdS9hcm03MjB0L3NlcmlhbC5jCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y2xwczcxMTEuaD4KIAorI2lmbmRlZiBDT05GSUdfTkVUQVJNCisKIHZvaWQgc2VyaWFsX3NldGJyZyAodm9pZCkKIHsKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKQEAgLTEyNCwzICsxMjYsNSBAQAogCQlzZXJpYWxfcHV0YyAoKnMrKyk7CiAJfQogfQorCisjZW5kaWYgLyogQ09ORklHX05FVEFSTSAqLwpkaWZmIC0tZ2l0IGEvY3B1L2FybTcyMHQvc2VyaWFsX25ldGFybS5jIGIvY3B1L2FybTcyMHQvc2VyaWFsX25ldGFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZmUwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtNzIwdC9zZXJpYWxfbmV0YXJtLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBTZXJpYWwgUG9ydCBzdHVmZiAtIHRha2VuIGZyb20gTGludXgKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIE1BWmVUIEdtYkggPHd3dy5tYXpldC5kZT4KKyAqIFN0ZXBoYW4gTGlueiA8bGluekBtYXpldC5kZT4sIDxsaW56QGxpLXByby5uZXQ+CisgKgorICogKGMpIDIwMDQKKyAqIElNTVMgZ0dtYkggPHd3dy5pbW1zLmRlPgorICogVGhvbWFzIEVsc3RlIDxpbmZvQGVsc3RlLm9yZz4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9uZXRhcm1fcmVnaXN0ZXJzLmg+CisKKyNpZmRlZiBDT05GSUdfTkVUQVJNCisKKyNkZWZpbmUgUE9SVEEJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKE5FVEFSTV9HRU5fTU9EVUxFX0JBU0UgKyBORVRBUk1fR0VOX1BPUlRBKSkKKyNkZWZpbmUgUE9SVEIJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKE5FVEFSTV9HRU5fTU9EVUxFX0JBU0UgKyBORVRBUk1fR0VOX1BPUlRCKSkKKworLyogd2FpdCB1bnRpbCB0cmFuc21pdHRlciBpcyByZWFkeSBmb3IgYW5vdGhlciBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgVFhXQUlUUkRZKHJlZ2lzdGVycykgCQkJCQkJCVwKK3sJCQkJCQkJCQkJXAorCXVsb25nIHRtbyA9IGdldF90aW1lcigwKSArIDEgKiBDRkdfSFo7CQkJCQlcCisJd2hpbGUgKCgocmVnaXN0ZXJzKS0+c3RhdHVzX2EgJiBORVRBUk1fU0VSX1NUQVRBX1RYX1JEWSkgPT0gMCApCXsJXAorCQlpZiAoZ2V0X3RpbWVyKDApID4gdG1vKQkJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJCVwKK30KKworCit2b2xhdGlsZSBuZXRhcm1fc2VyaWFsX2NoYW5uZWxfdCAqc2VyaWFsX3JlZ19jaDEgPSBnZXRfc2VyaWFsX2NoYW5uZWwoMCk7Cit2b2xhdGlsZSBuZXRhcm1fc2VyaWFsX2NoYW5uZWxfdCAqc2VyaWFsX3JlZ19jaDIgPSBnZXRfc2VyaWFsX2NoYW5uZWwoMSk7CisKK2V4dGVybiB2b2lkIF9uZXRhcm1fbGVkX0ZBSUwxKHZvaWQpOworCisvKgorICogU2V0dXAgYm90aCBzZXJpYWwgaS9mIHdpdGggZ2l2ZW4gYmF1ZHJhdGUKKyAqLwordm9pZCBzZXJpYWxfc2V0YnJnICh2b2lkKQoreworCS8qIGdldCB0aGUgZ2QgcG9pbnRlciAqLworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJLyogc2V0IDAgLi4uIG1ha2Ugc3VyZSBwaW5zIGFyZSBjb25maWd1cmVkIGZvciBzZXJpYWwgKi8KKwlQT1JUQSA9IFBPUlRCID0KKwkJTkVUQVJNX0dFTl9QT1JUX01PREUgKDB4ZWYpIHwgTkVUQVJNX0dFTl9QT1JUX0RJUiAoMHhlMCk7CisKKwkvKiBmaXJzdCB0dXJuIGVtIG9mZiAqLworCXNlcmlhbF9yZWdfY2gxLT5jdHJsX2EgPSBzZXJpYWxfcmVnX2NoMi0+Y3RybF9hID0gMDsKKworCS8qIGNsZWFyIG1hdGNoIHJlZ2lzdGVyLCB3ZSBkb24ndCBuZWVkIGl0ICovCisJc2VyaWFsX3JlZ19jaDEtPnJ4X21hdGNoID0gc2VyaWFsX3JlZ19jaDItPnJ4X21hdGNoID0gMDsKKworCS8qIHNldHVwIGJpdCByYXRlIGdlbmVyYXRvciBhbmQgcnggYnVmZmVyIGdhcCB0aW1lciAoMSBieXRlIG9ubHkpICovCisJaWYgKChnZC0+YmF1ZHJhdGUgPj0gTUlOX0JBVURfUkFURSkKKwkgICAgJiYgKGdkLT5iYXVkcmF0ZSA8PSBNQVhfQkFVRF9SQVRFKSkgeworCQlzZXJpYWxfcmVnX2NoMS0+Yml0cmF0ZSA9IHNlcmlhbF9yZWdfY2gyLT5iaXRyYXRlID0KKwkJCU5FVEFSTV9TRVJfQlJfWDE2IChnZC0+YmF1ZHJhdGUpOworCQlzZXJpYWxfcmVnX2NoMS0+cnhfYnVmX3RpbWVyID0gc2VyaWFsX3JlZ19jaDItPnJ4X2J1Zl90aW1lciA9CisJCQkwOworCQlzZXJpYWxfcmVnX2NoMS0+cnhfY2hhcl90aW1lciA9IHNlcmlhbF9yZWdfY2gyLT5yeF9jaGFyX3RpbWVyID0KKwkJCU5FVEFSTV9TRVJfUlhHQVAgKGdkLT5iYXVkcmF0ZSk7CisJfSBlbHNlIHsKKwkJaGFuZyAoKTsKKwl9CisKKwkvKiBzZXR1cCBwb3J0IG1vZGUgKi8KKwlzZXJpYWxfcmVnX2NoMS0+Y3RybF9iID0gc2VyaWFsX3JlZ19jaDItPmN0cmxfYiA9CisJCSggTkVUQVJNX1NFUl9DVExCX1JDR1RfRU4gfAorCQkgIE5FVEFSTV9TRVJfQ1RMQl9VQVJUX01PREUpOworCXNlcmlhbF9yZWdfY2gxLT5jdHJsX2EgPSBzZXJpYWxfcmVnX2NoMi0+Y3RybF9hID0KKwkJKCBORVRBUk1fU0VSX0NUTEFfRU5BQkxFIHwKKwkJICBORVRBUk1fU0VSX0NUTEFfUF9OT05FIHwKKwkJICAvKiBzZWUgZXJyYXRhICovCisJCSAgTkVUQVJNX1NFUl9DVExBXzJTVE9QIHwKKwkJICBORVRBUk1fU0VSX0NUTEFfOEJJVFMgfAorCQkgIE5FVEFSTV9TRVJfQ1RMQV9EVFJfRU4gfAorCQkgIE5FVEFSTV9TRVJfQ1RMQV9SVFNfRU4pOworfQorCisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBzZXJpYWwgcG9ydCB3aXRoIHRoZSBnaXZlbiBiYXVkcmF0ZS4gVGhlIHNldHRpbmdzCisgKiBhcmUgYWx3YXlzIDggZGF0YSBiaXRzLCBubyBwYXJpdHksIDEgc3RvcCBiaXQsIG5vIHN0YXJ0IGJpdHMuCisgKi8KK2ludCBzZXJpYWxfaW5pdCAodm9pZCkKK3sKKwlzZXJpYWxfc2V0YnJnICgpOworCXJldHVybiAwOworfQorCisKKy8qCisgKiBPdXRwdXQgYSBzaW5nbGUgYnl0ZSB0byB0aGUgc2VyaWFsIHBvcnQuCisgKi8KK3ZvaWQgc2VyaWFsX3B1dGMgKGNvbnN0IGNoYXIgYykKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpmaWZvOworCisJLyogSWYgXG4sIGFsc28gZG8gXHIgKi8KKwlpZiAoYyA9PSAnXG4nKQorCQlzZXJpYWxfcHV0YyAoJ1xyJyk7CisKKwlmaWZvID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgJihzZXJpYWxfcmVnX2NoMS0+Zmlmbyk7CisJVFhXQUlUUkRZIChzZXJpYWxfcmVnX2NoMSk7CisJKmZpZm8gPSBjOworfQorCisvKgorICogVGVzdCBvZiBhIHNpbmdsZSBieXRlIGZyb20gdGhlIHNlcmlhbCBwb3J0LiBSZXR1cm5zIDEgb24gc3VjY2VzcywgMAorICogb3RoZXJ3aXNlLgorICovCitpbnQgc2VyaWFsX3RzdGModm9pZCkKK3sKKwlyZXR1cm4gc2VyaWFsX3JlZ19jaDEtPnN0YXR1c19hICYgTkVUQVJNX1NFUl9TVEFUQV9SWF9SRFk7Cit9CisKKy8qCisgKiBSZWFkIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgc2VyaWFsIHBvcnQuIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwCisgKiBvdGhlcndpc2UuCisgKi8KK2ludCBzZXJpYWxfZ2V0YyAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY2hfdWludDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmZpZm87CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqZmlmb19jaGFyID0gTlVMTDsKKwlpbnQgYnVmX2NvdW50ID0gMDsKKworCXdoaWxlICghKHNlcmlhbF9yZWdfY2gxLT5zdGF0dXNfYSAmIE5FVEFSTV9TRVJfU1RBVEFfUlhfUkRZKSkKKwkJLyogTk9QICovIDsKKworCWZpZm8gPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICYoc2VyaWFsX3JlZ19jaDEtPmZpZm8pOworCWZpZm9fY2hhciA9ICh1bnNpZ25lZCBjaGFyICopICZjaF91aW50OworCWNoX3VpbnQgPSAqZmlmbzsKKworCWJ1Zl9jb3VudCA9IE5FVEFSTV9TRVJfU1RBVEFfUlhGREIgKHNlcmlhbF9yZWdfY2gxLT5zdGF0dXNfYSk7CisJc3dpdGNoIChidWZfY291bnQpIHsKKwljYXNlIE5FVEFSTV9TRVJfU1RBVEFfUlhGREJfNEJZVEVTOgorCQlidWZfY291bnQgPSA0OworCQlicmVhazsKKwljYXNlIE5FVEFSTV9TRVJfU1RBVEFfUlhGREJfM0JZVEVTOgorCQlidWZfY291bnQgPSAzOworCQlicmVhazsKKwljYXNlIE5FVEFSTV9TRVJfU1RBVEFfUlhGREJfMkJZVEVTOgorCQlidWZfY291bnQgPSAyOworCQlicmVhazsKKwljYXNlIE5FVEFSTV9TRVJfU1RBVEFfUlhGREJfMUJZVEVTOgorCQlidWZfY291bnQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBwYW5pYywgYmUgbmV2ZXIgaGVyZSAqLworCX0KKworCXNlcmlhbF9yZWdfY2gxLT5zdGF0dXNfYSB8PSBORVRBUk1fU0VSX1NUQVRBX1JYX0NMT1NFRDsKKworCXJldHVybiBjaF91aW50ICYgMHhmZjsKK30KKwordm9pZCBzZXJpYWxfcHV0cyAoY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnMpIHsKKwkJc2VyaWFsX3B1dGMgKCpzKyspOworCX0KK30KKworI2VuZGlmIC8qIENPTkZJR19ORVRBUk0gKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm03MjB0L3N0YXJ0LlMgYi9jcHUvYXJtNzIwdC9zdGFydC5TCmluZGV4IDdmZTM2YzYuLjc5MTA0OWEgMTAwNjQ0Ci0tLSBhL2NwdS9hcm03MjB0L3N0YXJ0LlMKKysrIGIvY3B1L2FybTcyMHQvc3RhcnQuUwpAQCAtMjYsNyArMjYsOSBAQAogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgotCisjaWZkZWYgQ09ORklHX05FVEFSTQorI2luY2x1ZGUgPGFzbS9hcmNoL25ldGFybV9yZWdpc3RlcnMuaD4KKyNlbmRpZgogCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE5NSw2ICsxOTcsNyBAQAogI2RlZmluZSBDTEtDVExfNzMgICAgICAweDYgIC8qIDczLjcyOCBNSHogKi8KIAogY3B1X2luaXRfY3JpdDoKKyNpZm5kZWYgQ09ORklHX05FVEFSTQogCS8qCiAJICogbWFzayBhbGwgSVJRcyBieSBjbGVhcmluZyBhbGwgYml0cyBpbiB0aGUgSU5UTVJzCiAJICovCkBAIC0yMjEsNiArMjI0LDU0IEBACiAJYmljCXIwLCByMCwgIzB4MDAwMDAwOGYJQCBjbGVhciBiaXRzIDcsIDM6MCAoQi0tLSBXQ0FNKQogCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCUAgc2V0IGJpdCAyIChBKSBBbGlnbgogCW1jcglwMTUsMCxyMCxjMSxjMAorI2Vsc2UgLyogQ09ORklHX05FVEFSTSAqLworCS8qCisJICogcHJpb3IgdG8gc29mdHdhcmUgcmVzZXQgOiBuZWVkIHRvIHNldCBwaW4gUE9SVEM0IHRvIGJlICpIUkVTRVQKKwkgKi8KKwlsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCisJbGRyCXIxLCA9KE5FVEFSTV9HRU5fUE9SVF9NT0RFKDB4MTApIHwgXAorCQkJTkVUQVJNX0dFTl9QT1JUX0RJUigweDEwKSkKKwlzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1BPUlRDXQorCS8qCisJICogc29mdHdhcmUgcmVzZXQgOiBzZWUgSFcgUmVmLiBHdWlkZSA4LjIuNCA6IFNvZnR3YXJlIFNlcnZpY2UgcmVnaXN0ZXIKKwkgKiAgICAgICAgICAgICAgICAgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGlzIHByb2Nlc3MKKwkgKi8KKwlsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCisJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRBCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQorCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQgorCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KKwlsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKKwlzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCisJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQorCS8qCisJICogc2V0dXAgUExMIGFuZCBTeXN0ZW0gQ29uZmlnCisJICovCisJbGRyCXIwLCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQorCisJbGRyCXIxLCA9KAlORVRBUk1fR0VOX1NZU19DRkdfTEVORElBTiB8IFwKKwkJCU5FVEFSTV9HRU5fU1lTX0NGR19CVVNGVUxMIHwgXAorCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX1VTRVJfRU4gfCBcCisJCQlORVRBUk1fR0VOX1NZU19DRkdfQUxJR05fQUJPUlQgfCBcCisJCQlORVRBUk1fR0VOX1NZU19DRkdfQlVTQVJCX0lOVCB8IFwKKwkJCU5FVEFSTV9HRU5fU1lTX0NGR19CVVNNT05fRU4gKQorCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TWVNURU1fQ09OVFJPTF0KKworCWxkcglyMSwgPSgJTkVUQVJNX0dFTl9QTExfQ1RMX1BMTENOVChORVRBUk1fUExMX0NPVU5UX1ZBTCkgfCBcCisJCQlORVRBUk1fR0VOX1BMTF9DVExfUE9MVFNUX0RFRiB8IFwKKwkJCU5FVEFSTV9HRU5fUExMX0NUTF9JTkRJVigxKSB8IFwKKwkJCU5FVEFSTV9HRU5fUExMX0NUTF9JQ1BfREVGIHwgXAorCQkJTkVUQVJNX0dFTl9QTExfQ1RMX09VVERJVigyKSApCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9QTExfQ09OVFJPTF0KKwkvKgorCSAqIG1hc2sgYWxsIElSUXMgYnkgY2xlYXJpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1ScworCSAqLworCW1vdglyMSwgIzAKKwlsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCisJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9JTlRSX0VOQUJMRV0KKyNlbmRpZiAvKiBDT05GSUdfTkVUQVJNICovCiAKICNpZmRlZiBDT05GSUdfQVJNN19SRVZECiAJLyogc2V0IGNsb2NrIHNwZWVkICovCkBAIC00MTUsNiArNDY2LDcgQEAKIAkuYWxpZ24JNQogLmdsb2JsIHJlc2V0X2NwdQogcmVzZXRfY3B1OgorI2lmbmRlZiBDT05GSUdfTkVUQVJNCiAJbW92ICAgICBpcCwgIzAKIAltY3IgICAgIHAxNSwgMCwgaXAsIGM3LCBjNywgMCAgICAgICAgICAgQCBpbnZhbGlkYXRlIGNhY2hlCiAJbWNyICAgICBwMTUsIDAsIGlwLCBjOCwgYzcsIDAgICAgICAgICAgIEAgZmx1c2ggVExCICh2NCkKQEAgLTQyMywzICs0NzUsMjEgQEAKIAliaWMgICAgIGlwLCBpcCwgIzB4MjEwMCAgICAgICAgICAgICAgICAgQCAuLnYuLi4ucy4uLi4uLi4uCiAJbWNyICAgICBwMTUsIDAsIGlwLCBjMSwgYzAsIDAgICAgICAgICAgIEAgY3RybCByZWdpc3RlcgogCW1vdiAgICAgcGMsIHIwCisjZWxzZQorCWxkcglyMSwgPU5FVEFSTV9NRU1fTU9EVUxFX0JBU0UKKwlsZHIJcjAsIFtyMSwgIytORVRBUk1fTUVNX0NTMF9CQVNFX0FERFJdCisJbGRyCXIxLCA9MHhGRkZGRjAwMAorCWFuZAlyMCwgcjEsIHIwCisJbGRyCXIxLCA9KHJlbG9jYXRlLVRFWFRfQkFTRSkKKwlhZGQJcjAsIHIxLCByMAorCWxkcglyNCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKKwlsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKKwlzdHIJcjEsIFtyNCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCisJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCisJc3RyCXIxLCBbcjQsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQorCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQQorCXN0cglyMSwgW3I0LCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KKwlsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEIKKwlzdHIJcjEsIFtyNCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCisJbW92CXBjLCByMAorI2VuZGlmCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmNvbW1hbmRzLml0ZXN0IGIvZG9jL1JFQURNRS5jb21tYW5kcy5pdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU0MTYwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5jb21tYW5kcy5pdGVzdApAQCAtMCwwICsxLDE2IEBACitBIHNsb3cgZGF5IHRvZGF5IHNvIGhlcmUgaXMgYSByZXZpc2VkIGl0ZXN0IGNvbW1hbmQgd2l0aCBwcm92aXNpb25hbCAKK3N1cHBvcnQgZm9yIGNvbXBhcmluZyBzdHJpbmdzIGFzIHdlbGwgOi0pKQorCitOb3cgdGFibGUgZHJpdmVuIHRvIGFsbG93IHRoZSBvcGVyYXRvcnMKKy1lcSwgLW5lLCAtbHQsIC1ndCwgLWxlLCAtZ2UsID09LCAhPSwgPD4sIDwsID4sIDw9LCA+PQorCitVc2VzIHRoZSBleHBlY3RlZCBjb21tYW5kIG1vZGlmaWVyIGZvciBpbnRlZ2VyIGNvbXBhcmVzIG9mIHdpZHRoIDEsIDIgb3IgCis0IGJ5dGVzIG9mIC5iLCAudywgLmwgYW5kIHRoZSBuZXcgbW9kaWZlciBvZiAucyBmb3IgYSBzdHJpbmcgY29tcGFyZS4gCitTdHJpbmcgY29tcGFyaXNvbiBpcyBvdmVyIHRoZSBsZW5ndGggb2YgdGhlIHNob3J0ZXIsIHRoaXMgaG9wZWZ1bGx5IAorYXZvaWRzIG1pc3NpbmcgdGVybWluYXRvcnMgd2hlbiB1c2luZyBhbiBpbmRpcmVjdCBwb2ludGVyLgorCitlZy4KK2lmIGl0ZXN0LmwgKjQwMDAwID09IDEyMzQ1Njc4IHRoZW47IC4uLi4KK2lmIGl0ZXN0LncgKjQwMDAwICE9IDEyMzQgdGhlbjsgLi4uLgoraWYgaXRlc3QuYiAqNDAwMDAgPj0gMTIgdGhlbjsgLi4uLgoraWYgaXRlc3QucyAqNDAwMDAgLWVxIGhlbGxvIHRoZW47IC4uLi4KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubW9kbmV0NTAgYi9kb2MvUkVBRE1FLm1vZG5ldDUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNzE2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvUkVBRE1FLm1vZG5ldDUwCkBAIC0wLDAgKzEsNjIgQEAKK1UtQk9PVCBQb3J0IGZvciBGU0ZvcnRoIE1vZE5FVDUwIEJvYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithdXRob3I6IFRob21hcyBFbHN0ZSA8aW5mb0BlbHN0ZS5vcmc+CisgICAgICAgIElNTVMgZ0dtYkggPHd3dy5pbW1zLmRlPgorCitUaGUgcG9ydCBiYXNlZCB1cG9uIGFuIGVhcmx5IChwYXJ0aWFsIGNvbXBsZXRlKQorYXJtYm9vdC1wb3J0IGZyb20gU3RlcGhhbiBMaW56IGZvciB0aGUgTW9kTkVUNTAgQm9hcmQuCisKKworT3ZlcnZpZXc6CisKKy0gYm9hcmQgd2l0aCBOZXRzaWxpY29uIE5FVCs1MCBBUk03VERNSSBDUFUgd2l0aG91dCBNTVUKKy0gMTYgTUIgU0RSQU0KKy0gMiBNQiBGbGFzaCAoTUJMMjlMVjE2MEJFKQorLSAxMC8xMDAgRXRoZXJuZXQgUEhZIChMWFQ5NzFBKQorCisKK0N1cnJlbnQgQ29uZmlndXJhdGlvbiAoaW5jbHVkZS9jb25maWdzL21vZG5ldDUwLmgpOgorCitNZW1vcnkgTWFwOiAweDAwMDAwMDAwIC0gMHgwMEZGRkZGRiAxNk0gU0RSQU0KKyAgICAgICAgICAgIDB4MTAwMDAwMDAgLSAweDEwMUZGRkZGICAyTSBGbGFzaAorCitUaGUgRmxhc2ggdXNlcyBhIEJCLUFyY2hpdGVjdHVyIHdpdGggMzUgc2VjdG9ycworKDA6MTZLOyAxLDI6OEs7IDM6MzJLOyA0LTM0OjY0SykuIFUtQm9vdCBpcyBsb2NhdGVkIGluCit0aGUgZmlyc3QgNSBzZWN0b3JzLgorCitUaGUgZW52aXJvbm1lbnQgaXMgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSA0dGggRmxhc2gKK3NlY3RvciAoMHgxMDAxQzAwMC0weDEwMDFGRkZGKS4KKworQnVpbGQ6CisKK1UtYm9vdCBzaG91bGQgYmUgYnVpbGQgYnkgdXNpbmcgdGhlIEVMREsgVG9vbGNoYWluIChhcm0tbGludXgtKikuCisKKwltYWtlIG1vZG5ldDUwX2NvbmZpZworCW1ha2UKKworCitTdGF0dXM6CisKK0V2ZXJ5dGhpbmcgc2VlbXMgdG8gd29yayBmaW5lLiBCb290aW5nIGltYWdlcyB3YXMgdGVzdGVkIGJ5Citib290aW5nIHVDTGludXggKHdpdGggYW5kIHdpdGhvdXQgYSBzZXBhcmF0ZSByYW1kaXNrIGltYWdlKSBmcm9tCitmbGFzaC4KKworCitGaWxlczoKKworY3B1L2FybTcyMHQvc2VyaWFsX25ldGFybS5jIC4uIHNlcmlhbCBJL08gZm9yIHRoZSBjcHUKKworYm9hcmQvbW9kbmV0NTAvbWVtc2V0dXAuUyAgIC4uIG1lbW9yeSBzZXR1cCBmb3IgTW9kTkVUNTAKK2JvYXJkL21vZG5ldDUwL2ZsYXNoLmMgICAgICAuLiBmbGFzaCByb3V0aW5lcworYm9hcmQvbW9kbmV0NTAvbW9kbmV0NTAuYyAgIC4uIHNvbWUgYm9hcmQgaW5pdCBzdHVmZgorCitkcml2ZXJzL25ldGFybV9ldGguYyAgICAgICAgLi4gZXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgTkVUKzUwIENQVQorZHJpdmVycy9uZXRhcm1fZXRoLmggICAgICAgIC4uIGhlYWRlciBmb3IgZXRoZXJuZXQgZHJpdmVyCisKK2luY2x1ZGUvY29uZmlncy9tb2RuZXQ1MC5oICAuLiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIE1vZE5FVDUwCisKK2luY2x1ZGUvbmV0YXJtXyouaCAgICAgICAgICAuLiByZWdpc3RlciBhbmQgbWFjcm8gZGVmaW5pdGlvbnMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE5FVEFSTSBDUFUgZmFtaWx5CisKK2RvYy9SRUFETUUubW9kbmV0NTAgICAgICAgICAuLiB0aGlzIHJlYWRtZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggMjk5OWViNC4uYjMzM2FlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0zMiwyNCArMzIsMTYgQEAKIAkgIGNzODkwMC5vIGN0NjkwMDAubyBkYXRhZmxhc2gubyBkYzIxMTR4Lm8gICAgICAgICAgXAogCSAgZTEwMDAubyBlZXBybzEwMC5vIFwKIAkgIGk4MDQyLm8gaTgyMzY1Lm8gaW5jYS1pcF9zdy5vIFwKLQkgIGxhbjkxYzk2Lm8gICAgICAgICAgICAgbmF0c2VtaS5vIFwKKwkgIGxhbjkxYzk2Lm8gbmF0c2VtaS5vIG5ldGFybV9ldGgubyBcCiAJICBuczE2NTUwLm8gbnM4MzgyeC5vIG5zODczMDgubyBcCiAJICBwY2kubyBwY2lfYXV0by5vIHBjaV9pbmRpcmVjdC5vIFwKIAkgIHBjbmV0Lm8gcGxiMjgwMF9ldGgubyBcCiAJICBwczJzZXIubyBwczJtdWx0Lm8gcGNfa2V5Yi5vIGtleWJvYXJkLm8gXAogCSAgcnRsODAxOS5vIHJ0bDgxMzkubyBcCi0JICBzM2MyNHgwX2kyYy5vIHNlZDEzODA2Lm8gc2VyaWFsLm8gXAotCSAgc2VyaWFsX21heDMxMDAubyBcCi0JICBzbWM5MTExMS5vIHNtaUx5bnhFTS5vICAgICAgICAgICAgICBzeW01M2M4eHgubyBcCi0JICBzdGF0dXNfbGVkLm8gXAorCSAgczNjMjR4MF9pMmMubyBzZWQxMzgwNi5vIHNlcmlhbC5vIHNlcmlhbF9tYXgzMTAwLm8gXAorCSAgc21jOTExMTEubyBzbWlMeW54RU0ubyBzdGF0dXNfbGVkLm8gc3ltNTNjOHh4Lm8gXAogCSAgdGlfcGNpMTQxMGEubyB0aWdvbjMubyB3ODNjNTUzZi5vCiAKLSMjIERpc2FibGVkIGZvciBub3c6Ci0jIwkgIGNzODkwMC5vIGN0NjkwMDAubyBkYXRhZmxhc2gubyBkYzIxMTR4Lm8gZHMxNzIyLm8gXAotIyMJICBsYW45MWM5Ni5vIG13X2VlcHJvbS5vIG5hdHNlbWkubyBcCi0jIwkgIHNtYzkxMTExLm8gc21pTHlueEVNLm8gc3BpX2VlcHJvbS5vIHN5bTUzYzh4eC5vIFwKLSMjCi0KIGFsbDoJJChMSUIpCiAKICQoTElCKToJJChPQkpTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZmlfZmxhc2guYyBiL2RyaXZlcnMvY2ZpX2ZsYXNoLmMKaW5kZXggYzZjMjc1MS4uOTUxNzlhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZmlfZmxhc2guYworKysgYi9kcml2ZXJzL2NmaV9mbGFzaC5jCkBAIC0zNiwxMyArMzYsMTQgQEAKICAqCiAgKiBUZXN0ZWQgQXJjaGl0ZWN0dXJlcwogICogUG9ydCBXaWR0aCAgQ2hpcCBXaWR0aCAgICAjIG9mIGJhbmtzCSAgIEZsYXNoIENoaXAgIEJvYXJkCi0gKiAzMgkgICAgICAgMTYJICAgICAxCQkgICAyM0YxMjhKMyAgICBzZXJhbm9hL2VhZ2xlCi0gKiA2NAkgICAgICAgMTYJICAgICAxCQkgICAyM0YxMjhKMyAgICBzZXJhbm9hL2ZhbGNvbgorICogMzIJICAgICAgIDE2CSAgICAgMQkJICAgMjhGMTI4SjMgICAgc2VyYW5vYS9lYWdsZQorICogNjQJICAgICAgIDE2CSAgICAgMQkJICAgMjhGMTI4SjMgICAgc2VyYW5vYS9mYWxjb24KICAqCiAgKi8KIAogLyogVGhlIERFQlVHIGRlZmluZSBtdXN0IGJlIGJlZm9yZSBjb21tb24gdG8gZW5hYmxlIGRlYnVnZ2luZyAqLwotI3VuZGVmCURFQlVHCisvKiAjZGVmaW5lIERFQlVHCSovCisKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaWZkZWYJQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0YXJtX2V0aC5jIGIvZHJpdmVycy9uZXRhcm1fZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1YjY1MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0YXJtX2V0aC5jCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IElNTVMgZ0dtYkggPHd3dy5pbW1zLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIGF1dGhvcihzKTogVGhvbWFzIEVsc3RlLCA8aW5mb0BlbHN0ZS5vcmc+CisgKiAgICAgICAgICAgIChzb21lIHBhcnRzIGRlcml2ZWQgZnJvbSB1Q0xpbnV4IE5ldGFybSBFdGhlcm5ldCBEcml2ZXIpCisgKi8KKworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgIm5ldGFybV9ldGguaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9uZXRhcm1fcmVnaXN0ZXJzLmg+CisKKyNpZmRlZiBDT05GSUdfRFJJVkVSX05FVEFSTUVUSAorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkVUKQorCitzdGF0aWMgaW50IG5hX21paV9wb2xsX2J1c3kgKHZvaWQpOworCitzdGF0aWMgdm9pZCBuYV9nZXRfbWFjX2FkZHIgKHZvaWQpCit7CisJdW5zaWduZWQgc2hvcnQgcFszXTsKKwljaGFyICptX2FkZHI7CisJY2hhciBldGhhZGRyWzIwXTsKKworCW1fYWRkciA9IChjaGFyICopIHA7CisKKwlwWzBdID0gKHVuc2lnbmVkIHNob3J0KSBHRVRfRUFERFIgKE5FVEFSTV9FVEhfU0FMX1NUQVRJT05fQUREUl8xKTsKKwlwWzFdID0gKHVuc2lnbmVkIHNob3J0KSBHRVRfRUFERFIgKE5FVEFSTV9FVEhfU0FMX1NUQVRJT05fQUREUl8yKTsKKwlwWzJdID0gKHVuc2lnbmVkIHNob3J0KSBHRVRfRUFERFIgKE5FVEFSTV9FVEhfU0FMX1NUQVRJT05fQUREUl8zKTsKKworCXNwcmludGYgKGV0aGFkZHIsICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsCisJCSBtX2FkZHJbMF0sIG1fYWRkclsxXSwKKwkJIG1fYWRkclsyXSwgbV9hZGRyWzNdLCBtX2FkZHJbNF0sIG1fYWRkcls1XSk7CisKKwlwcmludGYgKCJIVy1NQUMgQWRkcmVzczogICVzXG4iLCBldGhhZGRyKTsKKworCS8qIHNldCBlbnYsIHRvZG86IGNoZWNrIGlmIGFscmVhZHkgYW4gYWRyZXNzIGlzIHNldCAqLworCXNldGVudiAoImV0aGFkZHIiLCBldGhhZGRyKTsKK30KKworCitzdGF0aWMgdm9pZCBuYV9taWlfd3JpdGUgKGludCByZWcsIGludCB2YWx1ZSkKK3sKKwlpbnQgbWlpX2FkZHI7CisKKwkvKiBTZWxlY3QgcmVnaXN0ZXIgKi8KKwltaWlfYWRkciA9IENGR19FVEhfUEhZX0FERFIgKyByZWc7CisJU0VUX0VBRERSIChORVRBUk1fRVRIX01JSV9BRERSLCBtaWlfYWRkcik7CisJLyogV3JpdGUgdmFsdWUgKi8KKwlTRVRfRUFERFIgKE5FVEFSTV9FVEhfTUlJX1dSSVRFLCB2YWx1ZSk7CisJbmFfbWlpX3BvbGxfYnVzeSAoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBuYV9taWlfcmVhZCAoaW50IHJlZykKK3sKKwlpbnQgbWlpX2FkZHIsIHZhbDsKKworCS8qIFNlbGVjdCByZWdpc3RlciAqLworCW1paV9hZGRyID0gQ0ZHX0VUSF9QSFlfQUREUiArIHJlZzsKKwlTRVRfRUFERFIgKE5FVEFSTV9FVEhfTUlJX0FERFIsIG1paV9hZGRyKTsKKwkvKiBkbyBvbmUgbWFuYWdlbWVudCBjeWNsZSAqLworCVNFVF9FQUREUiAoTkVUQVJNX0VUSF9NSUlfQ01ELAorCQkgICBHRVRfRUFERFIgKE5FVEFSTV9FVEhfTUlJX0NNRCkgfCBORVRBUk1fRVRIX01JSUNfUlNUQVQpOworCW5hX21paV9wb2xsX2J1c3kgKCk7CisJLyogUmV0dXJuIHJlYWQgdmFsdWUgKi8KKwl2YWwgPSBHRVRfRUFERFIgKE5FVEFSTV9FVEhfTUlJX1JFQUQpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgbmFfbWlpX3BvbGxfYnVzeSAodm9pZCkKK3sKKwkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLworCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKKwl3aGlsZSAoZ2V0X3RpbWVyX21hc2tlZCAoKSA8IE5BX01JSV9QT0xMX0JVU1lfREVMQVkpIHsKKwkJaWYgKCEoR0VUX0VBRERSIChORVRBUk1fRVRIX01JSV9JTkQpICYgTkVUQVJNX0VUSF9NSUlJX0JVU1kpKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlwcmludGYgKCJuYV9taWlfYnVzeSB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50IG5hX21paV9pZGVudGlmeV9waHkgKHZvaWQpCit7CisJaW50IGlkX3JlZ19hID0gMDsKKworCS8qIGdldCBwaHkgaWQgcmVnaXN0ZXIgKi8KKwlpZF9yZWdfYSA9IG5hX21paV9yZWFkIChNSUlfUEhZX0lEKTsKKworCWlmIChpZF9yZWdfYSA9PSAweDAwNDMpIHsKKwkJLyogVGhpcyBtdXN0IGJlIGFuIEVuYWJsZSBvciBhIEx1Y2VudCBMVTNYMzEgUEhZIGNoaXAgKi8KKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChpZF9yZWdfYSA9PSAweDAwMTMpIHsKKwkJLyogaXQgaXMgYW4gSW50ZWwgTFhUOTcxQSAqLworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludCBuYV9taWlfbmVnb3RpYXRlICh2b2lkKQoreworCWludCBpID0gMDsKKworCS8qIEVuYWJsZSBhdXRvLW5lZ290aWF0aW9uICovCisJbmFfbWlpX3dyaXRlIChNSUlfUEhZX0FVVE9ORUdBRFYsIDB4MDFlMSk7CisJLyogRklYTUU6IDB4MDFFMSBpcyAxMDBNYiBoYWxmIGFuZCBmdWxsIGR1cGxleCwgMHgwMDYxIGlzIDEwTWIgb25seSAqLworCS8qIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLworCW5hX21paV93cml0ZSAoTUlJX1BIWV9DT05UUk9MLCAweDEyMDApOworCisJLyogc3RhdHVzIHJlZ2lzdGVyIGlzIDB4ZmZmZiBhZnRlciBzZXR0aW5nIHRoZSBhdXRvbmVnIHJlc3RhcnQgYml0ICovCisJd2hpbGUgKG5hX21paV9yZWFkIChNSUlfUEhZX1NUQVRVUykgPT0gMHhmZmZmKSB7CisJCWkrKzsKKwl9CisKKwkvKiBuYV9taWlfcmVhZCB1c2VzIHRoZSB0aW1lciBhbHJlYWR5LCBzbyB3ZSBjYW4ndCB1c2UgaXQgYWdhaW4gZm9yCisJICAgdGltZW91dCBjaGVja2luZy4KKwkgICBJbnN0ZWFkIHdlIGp1c3QgdHJ5IHNvbWUgdGltZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKwkJaWYgKChuYV9taWlfcmVhZCAoTUlJX1BIWV9TVEFUVVMpICYgMHgwMDI0KSA9PSAweDAwMjQpIHsKKwkJCXJldHVybiAwOworCQl9CisJfQorCS8qCisJICAgcHJpbnRmKCIqV2FybmluZyogYXV0b25lZ290aWF0aW9uIHRpbWVvdXQsIHN0YXR1czogMHgleFxuIixuYV9taWlfcmVhZChNSUlfUEhZX1NUQVRVUykpOworCSAqLworCXJldHVybiAoMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmFfbWlpX2NoZWNrX3NwZWVkICh2b2lkKQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwkvKiBSZWFkIFN0YXR1cyByZWdpc3RlciAqLworCXN0YXR1cyA9IG5hX21paV9yZWFkIChNSUlfUEhZX1NUQVRVUyk7CisJLyogQ2hlY2sgbGluayBzdGF0dXMuICBJZiAwLCBkZWZhdWx0IHRvIDEwMCBNYnBzLiAqLworCWlmICgoc3RhdHVzICYgMHgwMDA0KSA9PSAwKSB7CisJCXByaW50ZiAoIipXYXJuaW5nKiBubyBsaW5rIGRldGVjdGVkLCBzZXQgZGVmYXVsdCBzcGVlZCB0byAxMDBNYnNcbiIpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlpZiAoKG5hX21paV9yZWFkICgxNykgJiAweDQwMDApICE9IDApIHsKKwkJCXByaW50ZiAoIjEwME1icyBsaW5rIGRldGVjdGVkXG4iKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcHJpbnRmICgiMTBNYnMgbGluayBkZXRlY3RlZFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNldF9ldGggKHZvaWQpCit7CisJaW50IHB0OworCisJbmFfZ2V0X21hY19hZGRyICgpOworCXB0ID0gbmFfbWlpX2lkZW50aWZ5X3BoeSAoKTsKKworCS8qIHJlc2V0IHRoZSBwaHkgKi8KKwluYV9taWlfd3JpdGUgKE1JSV9QSFlfQ09OVFJPTCwgMHg4MDAwKTsKKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisJd2hpbGUgKGdldF90aW1lcl9tYXNrZWQgKCkgPCBOQV9NSUlfTkVHT1RJQVRFX0RFTEFZKSB7CisJCWlmICgobmFfbWlpX3JlYWQgKE1JSV9QSFlfU1RBVFVTKSAmIDB4ODAwMCkgPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPj0gTkFfTUlJX05FR09USUFURV9ERUxBWSkKKwkJcHJpbnRmICgicGh5IHJlc2V0IHRpbWVvdXRcbiIpOworCisJLyogc2V0IHRoZSBQQ1MgcmVnICovCisJU0VUX0VBRERSIChORVRBUk1fRVRIX1BDU19DRkcsIE5FVEFSTV9FVEhfUENTQ19DTEtTXzI1TSB8CisJCSAgIE5FVEFSTV9FVEhfUENTQ19FTkpBQiB8IE5FVEFSTV9FVEhfUENTQ19OT0NGUik7CisKKwluYV9taWlfbmVnb3RpYXRlICgpOworCW5hX21paV9jaGVja19zcGVlZCAoKTsKKworCS8qIERlbGF5IDEwIG1pbGxpc2Vjb25kLiAgKE1heWJlIHRoaXMgc2hvdWxkIGJlIDEgc2Vjb25kLikgKi8KKwl1ZGVsYXkgKDEwMDAwKTsKKworCS8qIFR1cm4gcmVjZWl2ZSBvbi4KKwkgICBFbmFibGUgc3RhdGlzdGljcyByZWdpc3RlciBhdXRvemVybyBvbiByZWFkLgorCSAgIERvIG5vdCBpbnNlcnQgTUFDIGFkZHJlc3Mgb24gdHJhbnNtaXQuCisJICAgRG8gbm90IGVuYWJsZSBzcGVjaWFsIHRlc3QgbW9kZXMuICAqLworCVNFVF9FQUREUiAoTkVUQVJNX0VUSF9TVExfQ0ZHLAorCQkgICAoTkVUQVJNX0VUSF9TVExDX0FVVE9aIHwgTkVUQVJNX0VUSF9TVExDX1JYRU4pKTsKKworCS8qIFNldCB0aGUgaW50ZXItcGFja2V0IGdhcCBkZWxheSB0byAwLjk2dXMgZm9yIE1JSS4KKwkgICBUaGUgTkVUK0FSTSBIL1cgUmVmZXJlbmNlIEd1aWRlIGluZGljYXRlcyB0aGF0IHRoZSBCYWNrLXRvLWJhY2sgSVBHCisJICAgR2FwIFRpbWVyIFJlZ2lzdGVyIHNob3VsZCBiZSBzZXQgdG8gMHgxNSBhbmQgdGhlIE5vbiBCYWNrLXRvLWJhY2sgSVBHCisJICAgR2FwIFRpbWVyIFJlZ2lzdGVyIHNob3VsZCBiZSBzZXQgdG8gMHgwMDAwMEMxMiBmb3IgdGhlIE1JSSBQSFkuICovCisJU0VUX0VBRERSIChORVRBUk1fRVRIX0IyQl9JUEdfR0FQX1RNUiwgMHgxNSk7CisJU0VUX0VBRERSIChORVRBUk1fRVRIX05CMkJfSVBHX0dBUF9UTVIsIDB4MDAwMDBDMTIpOworCisJLyogQWRkIENSQyB0byBlbmQgb2YgcGFja2V0cy4KKwkgICBQYWQgcGFja2V0cyB0byBtaW5pbXVtIGxlbmd0aCBvZiA2NCBieXRlcy4KKwkgICBBbGxvdyB1bmxpbWl0ZWQgbGVuZ3RoIHRyYW5zbWl0IHBhY2tldHMuCisJICAgUmVjZWl2ZSBhbGwgYnJvYWRjYXN0IHBhY2tldHMuCisJICAgTk9URTogIE11bHRpY2FzdCBhZGRyZXNzaW5nIGlzIE5PVCBlbmFibGVkIGhlcmUgY3VycmVudGx5LiAqLworCVNFVF9FQUREUiAoTkVUQVJNX0VUSF9NQUNfQ0ZHLAorCQkgICAoTkVUQVJNX0VUSF9NQUNDX0NSQ0VOIHwKKwkJICAgIE5FVEFSTV9FVEhfTUFDQ19QQURFTiB8IE5FVEFSTV9FVEhfTUFDQ19IVUdFTikpOworCVNFVF9FQUREUiAoTkVUQVJNX0VUSF9TQUxfRklMVEVSLCBORVRBUk1fRVRIX1NBTEZfQlJPQUQpOworCisJLyogZW5hYmxlIGZpZm9zICovCisJU0VUX0VBRERSIChORVRBUk1fRVRIX0dFTl9DVFJMLAorCQkgICAoTkVUQVJNX0VUSF9HQ1JfRVJYIHwgTkVUQVJNX0VUSF9HQ1JfRVRYKSk7CisKKwlyZXR1cm4gKDApOworfQorCisKK2V4dGVybiBpbnQgZXRoX2luaXQgKGJkX3QgKiBiZCkKK3sKKwlyZXNldF9ldGggKCk7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkIGV0aF9oYWx0ICh2b2lkKQoreworCVNFVF9FQUREUiAoTkVUQVJNX0VUSF9HRU5fQ1RSTCwgMCk7Cit9CisKKy8qIEdldCBhIGRhdGEgYmxvY2sgdmlhIEV0aGVybmV0ICovCitleHRlcm4gaW50IGV0aF9yeCAodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCByeGxlbjsKKwl1bnNpZ25lZCBpbnQgKmFkZHI7CisJdW5zaWduZWQgaW50IHJ4c3RhdHVzLCBsYXN0cnhsZW47CisJY2hhciAqcGE7CisKKwkvKiBSWEJSIGlzIDEsIGRhdGEgYmxvY2sgd2FzIHJlY2VpdmVkICovCisJaWYgKChHRVRfRUFERFIgKE5FVEFSTV9FVEhfR0VOX1NUQVQpICYgTkVUQVJNX0VUSF9HU1RfUlhCUikgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBnZXQgc3RhdHVzIHJlZ2lzdGVyIGFuZCB0aGUgbGVuZ3RoIG9mIHJlY2VpdmVkIGJsb2NrICovCisJcnhzdGF0dXMgPSBHRVRfRUFERFIgKE5FVEFSTV9FVEhfUlhfU1RBVCk7CisJcnhsZW4gPSAocnhzdGF0dXMgJiBORVRBUk1fRVRIX1JYU1RBVF9TSVpFKSA+PiAxNjsKKworCWlmIChyeGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIGNsZWFyIFJYQlIgdG8gbWFrZSBmaWZvIGF2YWlsYWJsZSAqLworCVNFVF9FQUREUiAoTkVUQVJNX0VUSF9HRU5fU1RBVCwKKwkJICAgR0VUX0VBRERSIChORVRBUk1fRVRIX0dFTl9TVEFUKSAmIH5ORVRBUk1fRVRIX0dTVF9SWEJSKTsKKworCS8qIGNsZWFyIFRYQkMgdG8gbWFrZSBmaWZvIGF2YWlsYWJsZSAqLworCS8qIEFjY29yZGluZyB0byBORVRBUk01MCBkYXRhIG1hbnVhbCB5b3UganVzdCBoYXZlIHRvIGNsZWFyCisJICAgUlhCUiBidXQgdGhhdCBoYXMgbm8gZWZmZWN0LiBPbmx5IGFmdGVyIGNsZWFyaW5nIFRYQkMgdGhlCisJICAgRmlmbyBiZWNvbWVzIHJlYWRhYmxlLiAqLworCVNFVF9FQUREUiAoTkVUQVJNX0VUSF9HRU5fU1RBVCwKKwkJICAgR0VUX0VBRERSIChORVRBUk1fRVRIX0dFTl9TVEFUKSAmIH5ORVRBUk1fRVRIX0dTVF9UWEJDKTsKKworCWFkZHIgPSAodW5zaWduZWQgaW50ICopIE5ldFJ4UGFja2V0c1swXTsKKwlwYSA9IChjaGFyICopIE5ldFJ4UGFja2V0c1swXTsKKworCS8qIHJlYWQgdGhlIGZpZm8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgcnhsZW4gLyA0OyBpKyspIHsKKwkJKmFkZHIgPSBHRVRfRUFERFIgKE5FVEFSTV9FVEhfRklGT19EQVQxKTsKKwkJYWRkcisrOworCX0KKworCWlmIChHRVRfRUFERFIgKE5FVEFSTV9FVEhfR0VOX1NUQVQpICYgTkVUQVJNX0VUSF9HU1RfUlhSRUdSKSB7CisJCS8qIFJYRkRCIGluZGljYXRlcyB3ZXRoZXIgdGhlIGxhc3Qgd29yZCBpcyAxLDIsMyBvciA0IGJ5dGVzIGxvbmcgKi8KKwkJbGFzdHJ4bGVuID0KKwkJCShHRVRfRUFERFIgKE5FVEFSTV9FVEhfR0VOX1NUQVQpICYKKwkJCSBORVRBUk1fRVRIX0dTVF9SWEZEQikgPj4gMjg7CisJCSphZGRyID0gR0VUX0VBRERSIChORVRBUk1fRVRIX0ZJRk9fREFUMSk7CisJCXN3aXRjaCAobGFzdHJ4bGVuKSB7CisJCWNhc2UgMToKKwkJCSphZGRyICY9IDB4ZmYwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJKmFkZHIgJj0gMHhmZmZmMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQkqYWRkciAmPSAweGZmZmZmZjAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBQYXNzIHRoZSBwYWNrZXQgdXAgdG8gdGhlIHByb3RvY29sIGxheWVycy4gKi8KKwlOZXRSZWNlaXZlIChOZXRSeFBhY2tldHNbMF0sIHJ4bGVuKTsKKworCXJldHVybiByeGxlbjsKK30KKworLyogU2VuZCBhIGRhdGEgYmxvY2sgdmlhIEV0aGVybmV0LiAqLworZXh0ZXJuIGludCBldGhfc2VuZCAodm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKQoreworCWludCBpLCBsZW5ndGgzMjsKKwljaGFyICpwYTsKKwl1bnNpZ25lZCBpbnQgKnBhMzIsIGxhc3RwID0gMCwgcmVzdDsKKworCXBhID0gKGNoYXIgKikgcGFja2V0OworCXBhMzIgPSAodW5zaWduZWQgaW50ICopIHBhY2tldDsKKwlsZW5ndGgzMiA9IGxlbmd0aCAvIDQ7CisJcmVzdCA9IGxlbmd0aCAlIDQ7CisKKwkvKiBtYWtlIHN1cmUgdGhlcmUncyBubyBnYXJiYWdlIGluIHRoZSBsYXN0IHdvcmQgKi8KKwlzd2l0Y2ggKHJlc3QpIHsKKwljYXNlIDA6CisJCWxhc3RwID0gcGEzMltsZW5ndGgzMl07CisJCWxlbmd0aDMyLS07CisJCWJyZWFrOworCWNhc2UgMToKKwkJbGFzdHAgPSBwYTMyW2xlbmd0aDMyXSAmIDB4MDAwMDAwZmY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbGFzdHAgPSBwYTMyW2xlbmd0aDMyXSAmIDB4MDAwMGZmZmY7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJbGFzdHAgPSBwYTMyW2xlbmd0aDMyXSAmIDB4MDBmZmZmZmY7CisJCWJyZWFrOworCX0KKworCS8qIHdyaXRlIHRvIHRoZSBmaWZvICovCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDMyOyBpKyspCisJCVNFVF9FQUREUiAoTkVUQVJNX0VUSF9GSUZPX0RBVDEsIHBhMzJbaV0pOworCisJLyogdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuIHRvIGFuIGV4dHJhIHJlZ2lzdGVyLCB0aGlzCisJICAgc3RhcnRzIHRoZSB0cmFuc21pc3Npb24gKi8KKwlTRVRfRUFERFIgKE5FVEFSTV9FVEhfRklGT19EQVQyLCBsYXN0cCk7CisKKwkvKiBORVRBUk1fRVRIX1RYU1RBVF9UWE9LIHNob3VsZCBiZSBjaGVja2VkLCB0byBrbm93IGlmIHRoZSB0cmFuc21pc3Npb24KKwkgICB3ZW50IGZpbmUuIEJ1dCB3ZSBjYW4ndCB1c2UgdGhlIHRpbWVyIGZvciBhIHRpbWVvdXQgbG9vcCBiZWNhdXNlCisJICAgb2YgaXQgaXMgdXNlZCBhbHJlYWR5IGluIHVwcGVyIGxheWVycy4gU28gd2UganVzdCB0cnkgc29tZSB0aW1lcy4gKi8KKwlpID0gMDsKKwl3aGlsZSAoaSA8IDUwMDAwKSB7CisJCWlmICgoR0VUX0VBRERSIChORVRBUk1fRVRIX1RYX1NUQVQpICYgTkVUQVJNX0VUSF9UWFNUQVRfVFhPSykKKwkJICAgID09IE5FVEFSTV9FVEhfVFhTVEFUX1RYT0spCisJCQlyZXR1cm4gMDsKKwkJaSsrOworCX0KKworCXByaW50ZiAoImV0aF9zZW5kIHRpbWVvdXRcbiIpOworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogQ09NTUFORFMgJiBDRkdfTkVUICovCisKKyNlbmRpZiAvKiBDT05GSUdfRFJJVkVSX05FVEFSTUVUSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXRhcm1fZXRoLmggYi9kcml2ZXJzL25ldGFybV9ldGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRhYjgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXRhcm1fZXRoLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBJTU1TIGdHbWJIIDx3d3cuaW1tcy5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBhdXRob3Iocyk6IFRob21hcyBFbHN0ZSwgPGluZm9AZWxzdGUub3JnPgorICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmZGVmIENPTkZJR19EUklWRVJfTkVUQVJNRVRICisKKyNkZWZpbmUgU0VUX0VBRERSKGFkLHZhbCkgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKShhZCArIE5FVEFSTV9FVEhfTU9EVUxFX0JBU0UpID0gdmFsCisjZGVmaW5lIEdFVF9FQUREUihhZCkgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50KikoYWQgKyBORVRBUk1fRVRIX01PRFVMRV9CQVNFKSkKKworI2RlZmluZSBOQV9NSUlfUE9MTF9CVVNZX0RFTEFZIDkwMAorCisvKiBNSUkgbmVnb3RpYXRpb24gdGltZW91dCB2YWx1ZQorICAgNTAwIGppZmZpZXMgPSA1IHNlY29uZHMgKi8KKyNkZWZpbmUgTkFfTUlJX05FR09USUFURV9ERUxBWSAzMAorCisvKiBSZWdpc3RlcnMgaW4gdGhlIHBoeXNpY2FsIGxheWVyIGNoaXAgKi8KKyNkZWZpbmUgTUlJX1BIWV9DT05UUk9MCQkwCisjZGVmaW5lIE1JSV9QSFlfU1RBVFVTCQkxCisjZGVmaW5lIE1JSV9QSFlfSUQgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUlJX1BIWV9BVVRPTkVHQURWCTQKKworI2VuZGlmIC8qIENPTkZJR19EUklWRVJfTkVUQVJNRVRIICovCmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmMgYi9mcy9mYXQvZmF0LmMKaW5kZXggZjAyYzQwNC4uZGFhNzAzNCAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZhdC5jCisrKyBiL2ZzL2ZhdC9mYXQuYwpAQCAtNDMyLDEyICs0MzIsMTMgQEAKIAlkaXJfZW50cnkgKnJlYWxkZW50OwogCWRpcl9zbG90ICAqc2xvdHB0ciA9IChkaXJfc2xvdCopIHJldGRlbnQ7CiAJX191OAkgICpuZXh0Y2x1c3QgPSBjbHVzdGVyICsgbXlkYXRhLT5jbHVzdF9zaXplICogU0VDVE9SX1NJWkU7Ci0JX191OAkgICBjb3VudGVyID0gc2xvdHB0ci0+aWQgJiAweGY7CisJX191OAkgICBjb3VudGVyID0gKHNsb3RwdHItPmlkICYgfkxBU1RfTE9OR19FTlRSWV9NQVNLKSAmIDB4ZmY7CiAJaW50IGlkeCA9IDA7CiAKIAl3aGlsZSAoKF9fdTgqKXNsb3RwdHIgPCBuZXh0Y2x1c3QpIHsKIAkJaWYgKGNvdW50ZXIgPT0gMCkgYnJlYWs7Ci0JCWlmICgoc2xvdHB0ci0+aWQgJiAweDBmKSAhPSBjb3VudGVyKSByZXR1cm4gLTE7CisJCWlmICgoKHNsb3RwdHItPmlkICYgfkxBU1RfTE9OR19FTlRSWV9NQVNLKSAmIDB4ZmYpICE9IGNvdW50ZXIpCisJCQlyZXR1cm4gLTE7CiAJCXNsb3RwdHIrKzsKIAkJY291bnRlci0tOwogCX0KQEAgLTQ3NSw3ICs0NzYsNyBAQAogCWRvIHsKIAkJc2xvdHB0ci0tOwogCQlpZiAoc2xvdDJzdHIoc2xvdHB0ciwgbF9uYW1lLCAmaWR4KSkgYnJlYWs7Ci0JfSB3aGlsZSAoIShzbG90cHRyLT5pZCAmIDB4NDApKTsKKwl9IHdoaWxlICghKHNsb3RwdHItPmlkICYgTEFTVF9MT05HX0VOVFJZX01BU0spKTsKIAogCWxfbmFtZVtpZHhdID0gJ1wwJzsKIAlpZiAoKmxfbmFtZSA9PSBERUxFVEVEX0ZMQUcpICpsX25hbWUgPSAnXDAnOwpAQCAtNTM2LDcgKzUzNyw3IEBACiAJICAgIGlmICgoZGVudHB0ci0+YXR0ciAmIEFUVFJfVk9MVU1FKSkgewogI2lmZGVmIENPTkZJR19TVVBQT1JUX1ZGQVQKIAkJaWYgKChkZW50cHRyLT5hdHRyICYgQVRUUl9WRkFUKSAmJgotCQkgICAgKGRlbnRwdHItPm5hbWVbMF0gJiAweDQwKSkgeworCQkgICAgKGRlbnRwdHItPm5hbWVbMF0gJiBMQVNUX0xPTkdfRU5UUllfTUFTSykpIHsKIAkJICAgIHByZXZja3N1bSA9ICgoZGlyX3Nsb3QgKikgZGVudHB0cikKIAkJCSAgICAtPmFsaWFzX2NoZWNrc3VtOwogCQkgICAgZ2V0X3ZmYXRuYW1lIChteWRhdGEsIGN1cmNsdXN0LCBnZXRfZGVudGZyb21kaXJfYmxvY2ssCkBAIC03OTksNyArODAwLDcgQEAKIAkgICAgaWYgKChkZW50cHRyLT5hdHRyICYgQVRUUl9WT0xVTUUpKSB7CiAjaWZkZWYgQ09ORklHX1NVUFBPUlRfVkZBVAogCQlpZiAoKGRlbnRwdHItPmF0dHIgJiBBVFRSX1ZGQVQpICYmCi0JCSAgICAoZGVudHB0ci0+bmFtZVswXSAmIDB4NDApKSB7CisJCSAgICAoZGVudHB0ci0+bmFtZVswXSAmIExBU1RfTE9OR19FTlRSWV9NQVNLKSkgewogCQkgICAgcHJldmNrc3VtID0gKChkaXJfc2xvdCAqKSBkZW50cHRyKS0+YWxpYXNfY2hlY2tzdW07CiAJCSAgICBnZXRfdmZhdG5hbWUgKG15ZGF0YSwgMCwgZG9fZmF0X3JlYWRfYmxvY2ssIGRlbnRwdHIsIGxfbmFtZSk7CiAJCSAgICBpZiAoZG9scyA9PSBMU19ST09UKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L25ldGFybV9kbWFfbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L25ldGFybV9kbWFfbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxNzAzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbmV0YXJtX2RtYV9tb2R1bGUuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybW5vbW11L2FyY2gtbmV0YXJtL25ldGFybV9kbWFfbW9kdWxlLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTkVUc2lsaWNvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAwIFdpcmVTcGVlZCBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYnkgV2lyZVNwZWVkLiBMSUNFTlNFRSBhZ3JlZXMgdGhhdAorICogaXQgd2lsbCBub3QgZGVsZXRlIHRoaXMgY29weXJpZ2h0IG5vdGljZSwgdHJhZGVtYXJrcyBvciBwcm90ZWN0aXZlCisgKiBub3RpY2VzIGZyb20gYW55IGNvcHkgbWFkZSBieSBMSUNFTlNFRS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUy1JUyIgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkKKyAqIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorICogcHVycG9zZSByZWdhcmRpbmcgdGhpcyBzb2Z0d2FyZS4gSW4gbm8gZXZlbnQgc2hhbGwgV2lyZVNwZWVkCisgKiBiZSBsaWFibGUgZm9yIGFueSBpbmRpcmVjdCwgY29uc2VxdWVudGlhbCwgb3IgaW5jaWRlbnRhbCBkYW1hZ2VzLAorICogbG9zcyBvZiBwcm9maXRzIG9yIHJldmVudWUsIGxvc3Mgb2YgdXNlIG9yIGRhdGEsIG9yIGludGVycnVwdGlvbgorICogb2YgYnVzaW5lc3MsIHdoZXRoZXIgdGhlIGFsbGVnZWQgZGFtYWdlcyBhcmUgbGFiZWxlZCBpbiBjb250cmFjdCwKKyAqIHRvcnQsIG9yIGluZGVtbml0eS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogYXV0aG9yKHMpIDogSm9lIGRlQmxhcXVpZXJlCisgKiAgICAgICAgICAgICBEYXZpZCBTbWl0aAorICovCisKKyNpZm5kZWYgX19ORVRBUk1fRE1BX01PRFVMRV9SRUdJU1RFUlNfSAorI2RlZmluZSBfX05FVEFSTV9ETUFfTU9EVUxFX1JFR0lTVEVSU19ICisKKy8qIEdFTiB1bml0IHJlZ2lzdGVyIG9mZnNldHMgKi8KKworI2RlZmluZQlORVRBUk1fRE1BX01PRFVMRV9CQVNFCQkoMHhGRjkwMDAwMCkKKworI2RlZmluZSBnZXRfZG1hX3JlZ19hZGRyKGMpICgodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKE5FVEFSTV9ETUFfTU9EVUxFX0JBU0UgKyAoYykpKQorCisjZGVmaW5lCU5FVEFSTV9ETUExQV9CRlJfREVTQ1JQVE9SX1BUUgkoMHgwMCkKKyNkZWZpbmUJTkVUQVJNX0RNQTFBX0NPTlRST0wJCSgweDEwKQorI2RlZmluZQlORVRBUk1fRE1BMUFfU1RBVFVTCQkoMHgxNCkKKyNkZWZpbmUJTkVUQVJNX0RNQTFCX0JGUl9ERVNDUlBUT1JfUFRSCSgweDIwKQorI2RlZmluZQlORVRBUk1fRE1BMUJfQ09OVFJPTAkJKDB4MzApCisjZGVmaW5lCU5FVEFSTV9ETUExQl9TVEFUVVMJCSgweDM0KQorI2RlZmluZQlORVRBUk1fRE1BMUNfQkZSX0RFU0NSUFRPUl9QVFIJKDB4NDApCisjZGVmaW5lCU5FVEFSTV9ETUExQ19DT05UUk9MCQkoMHg1MCkKKyNkZWZpbmUJTkVUQVJNX0RNQTFDX1NUQVRVUwkJKDB4NTQpCisjZGVmaW5lCU5FVEFSTV9ETUExRF9CRlJfREVTQ1JQVE9SX1BUUgkoMHg2MCkKKyNkZWZpbmUJTkVUQVJNX0RNQTFEX0NPTlRST0wJCSgweDcwKQorI2RlZmluZQlORVRBUk1fRE1BMURfU1RBVFVTCQkoMHg3NCkKKworI2RlZmluZQlORVRBUk1fRE1BMl9CRlJfREVTQ1JQVE9SX1BUUgkoMHg4MCkKKyNkZWZpbmUJTkVUQVJNX0RNQTJfQ09OVFJPTAkJKDB4OTApCisjZGVmaW5lCU5FVEFSTV9ETUEyX1NUQVRVUwkJKDB4OTQpCisKKyNkZWZpbmUJTkVUQVJNX0RNQTNfQkZSX0RFU0NSUFRPUl9QVFIJKDB4QTApCisjZGVmaW5lCU5FVEFSTV9ETUEzX0NPTlRST0wJCSgweEIwKQorI2RlZmluZQlORVRBUk1fRE1BM19TVEFUVVMJCSgweEI0KQorCisjZGVmaW5lCU5FVEFSTV9ETUE0X0JGUl9ERVNDUlBUT1JfUFRSCSgweEMwKQorI2RlZmluZQlORVRBUk1fRE1BNF9DT05UUk9MCQkoMHhEMCkKKyNkZWZpbmUJTkVUQVJNX0RNQTRfU1RBVFVTCQkoMHhENCkKKworI2RlZmluZQlORVRBUk1fRE1BNV9CRlJfREVTQ1JQVE9SX1BUUgkoMHhFMCkKKyNkZWZpbmUJTkVUQVJNX0RNQTVfQ09OVFJPTAkJKDB4RjApCisjZGVmaW5lCU5FVEFSTV9ETUE1X1NUQVRVUwkJKDB4RjQpCisKKyNkZWZpbmUJTkVUQVJNX0RNQTZfQkZSX0RFU0NSUFRPUl9QVFIJKDB4MTAwKQorI2RlZmluZQlORVRBUk1fRE1BNl9DT05UUk9MCQkoMHgxMTApCisjZGVmaW5lCU5FVEFSTV9ETUE2X1NUQVRVUwkJKDB4MTE0KQorCisjZGVmaW5lCU5FVEFSTV9ETUE3X0JGUl9ERVNDUlBUT1JfUFRSCSgweDEyMCkKKyNkZWZpbmUJTkVUQVJNX0RNQTdfQ09OVFJPTAkJKDB4MTMwKQorI2RlZmluZQlORVRBUk1fRE1BN19TVEFUVVMJCSgweDEzNCkKKworI2RlZmluZQlORVRBUk1fRE1BOF9CRlJfREVTQ1JQVE9SX1BUUgkoMHgxNDApCisjZGVmaW5lCU5FVEFSTV9ETUE4X0NPTlRST0wJCSgweDE1MCkKKyNkZWZpbmUJTkVUQVJNX0RNQThfU1RBVFVTCQkoMHgxNTQpCisKKyNkZWZpbmUJTkVUQVJNX0RNQTlfQkZSX0RFU0NSUFRPUl9QVFIJKDB4MTYwKQorI2RlZmluZQlORVRBUk1fRE1BOV9DT05UUk9MCQkoMHgxNzApCisjZGVmaW5lCU5FVEFSTV9ETUE5X1NUQVRVUwkJKDB4MTc0KQorCisjZGVmaW5lCU5FVEFSTV9ETUExMF9CRlJfREVTQ1JQVE9SX1BUUgkoMHgxODApCisjZGVmaW5lCU5FVEFSTV9ETUExMF9DT05UUk9MCQkoMHgxOTApCisjZGVmaW5lCU5FVEFSTV9ETUExMF9TVEFUVVMJCSgweDE5NCkKKworLyogc2VsZWN0IGJpdGZpZWxkIGRlZmludGlvbnMgKi8KKworLyogRE1BIENvbnRyb2wgUmVnaXN0ZXIgKCAweEZGOTBfMFhYMCApICovCisKKyNkZWZpbmUgTkVUQVJNX0RNQV9DVExfRU5BQkxFCQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSBORVRBUk1fRE1BX0NUTF9BQk9SVAkJKDB4NDAwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0RNQV9DVExfQlVTXzEwMF9QRVJDRU5UCSgweDAwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX0NUTF9CVVNfNzVfUEVSQ0VOVAkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0RNQV9DVExfQlVTXzUwX1BFUkNFTlQJKDB4MjAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfQ1RMX0JVU18yNV9QRVJDRU5UCSgweDMwMDAwMDAwKQorCisjZGVmaW5lIE5FVEFSTV9ETUFfQ1RMX0JVU19NQVNLCQkoMHgzMDAwMDAwMCkKKworI2RlZmluZSBORVRBUk1fRE1BX0NUTF9NT0RFX0ZCX1RPX01FTQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0RNQV9DVExfTU9ERV9GQl9GUk9NX01FTQkoMHgwNDAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0RNQV9DVExfTU9ERV9NRU1fVE9fTUVNCSgweDA4MDAwMDAwKQorCisjZGVmaW5lIE5FVEFSTV9ETUFfQ1RMX0JVUlNUX05PTkUJKDB4MDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfQ1RMX0JVUlNUXzhfQllURQkoMHgwMTAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0RNQV9DVExfQlVSU1RfMTZfQllURQkoMHgwMjAwMDAwMCkKKworI2RlZmluZSBORVRBUk1fRE1BX0NUTF9CVVJTVF9NQVNLCSgweDAzMDAwMDAwKQorCisjZGVmaW5lIE5FVEFSTV9ETUFfQ1RMX1NSQ19JTkNSRU1FTlQJKDB4MDAyMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0RNQV9DVExfRFNUX0lOQ1JFTUVOVAkoMHgwMDEwMDAwMCkKKworLyogdGhlc2UgYXBwbHkgb25seSB0byBleHQgeGZlcnMgb24gRE1BIDMgb3IgNCAqLworCisjZGVmaW5lIE5FVEFSTV9ETUFfQ1RMX0NIXzNfNF9SRVFfRVhUCSgweDAwODAwMDAwKQorCisjZGVmaW5lIE5FVEFSTV9ETUFfQ1RMX0NIXzNfNF9EQVRBXzMyCSgweDAwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX0NUTF9DSF8zXzRfREFUQV8xNgkoMHgwMDAxMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0RNQV9DVExfQ0hfM180X0RBVEFfOAkoMHgwMDAyMDAwMCkKKworI2RlZmluZSBORVRBUk1fRE1BX0NUTF9TVEFURShYKQkoKFgpICYgMHhGQzAwKQorI2RlZmluZSBORVRBUk1fRE1BX0NUTF9JTkRFWChYKQkoKFgpICYgMHgwM0ZGKQorCisvKiBETUEgU3RhdHVzIFJlZ2lzdGVyICggMHhGRjkwXzBYWDQgKSAqLworCisjZGVmaW5lIE5FVEFSTV9ETUFfU1RBVF9OQ19JTlRQRU4JKDB4ODAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfU1RBVF9FQ19JTlRQRU4JKDB4NDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfU1RBVF9OUl9JTlRQRU4JKDB4MjAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfU1RBVF9DQV9JTlRQRU4JKDB4MTAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfU1RBVF9JTlRQRU5fTUFTSwkoMHhGMDAwMDAwMCkKKworI2RlZmluZSBORVRBUk1fRE1BX1NUQVRfTkNfSU5UX0VOCSgweDAwODAwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX1NUQVRfRUNfSU5UX0VOCSgweDAwNDAwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX1NUQVRfTlJfSU5UX0VOCSgweDAwMjAwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX1NUQVRfQ0FfSU5UX0VOCSgweDAwMTAwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX1NUQVRfSU5UX0VOX01BU0sJKDB4MDBGMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0RNQV9TVEFUX1dSQVAJCSgweDAwMDgwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX1NUQVRfSURPTkUJCSgweDAwMDQwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX1NUQVRfTEFTVAkJKDB4MDAwMjAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfU1RBVF9GVUxMCQkoMHgwMDAxMDAwMCkKKworI2RlZmluZQlORVRBUk1fRE1BX1NUQVRfQlVGTEVOKFgpCSgoWCkgJiAweDdGRkYpCisKKy8qIERNQSBCdWZmZXIgRGVzY3JpcHRvciBXb3JkIDAgYml0ZmllbGRzLiAqLworCisjZGVmaW5lIE5FVEFSTV9ETUFfQkQwX1dSQVAJCSgweDgwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX0JEMF9JRE9ORQkJKDB4NDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfQkQwX0xBU1QJCSgweDIwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRE1BX0JEMF9CVUZQVFJfTUFTSwkoMHgxRkZGRkZGRikKKworLyogRE1BIEJ1ZmZlciBEZXNjcmlwdG9yIFdvcmQgMSBiaXRmaWVsZHMuICovCisKKyNkZWZpbmUgTkVUQVJNX0RNQV9CRDFfU1RBVFVTX01BU0sJKDB4RkZGRjAwMDApCisjZGVmaW5lIE5FVEFSTV9ETUFfQkQxX0ZVTEwJCSgweDAwMDA4MDAwKQorI2RlZmluZSBORVRBUk1fRE1BX0JEMV9CVUZMRU5fTUFTSwkoMHgwMDAwN0ZGRikKKworI2lmbmRlZglfX0FTU0VNQkxFUl9fCisKK3R5cGVkZWYJc3RydWN0IF9fTkVUQVJNX0RNQV9CdWZmX0Rlc2NfRmx5QnkKK3sKKwl1bnNpZ25lZCBpbnQgd29yZDA7CisJdW5zaWduZWQgaW50IHdvcmQxOworfSBORVRBUk1fRE1BX0J1ZmZfRGVzY19GbHlCeSwgKnBORVRBUk1fRE1BX0J1ZmZfRGVzY19GbHlCeSA7CisKK3R5cGVkZWYJc3RydWN0IF9fTkVUQVJNX0RNQV9CdWZmX0Rlc2NfTV90b19NCit7CisJdW5zaWduZWQgaW50IHdvcmQwOworCXVuc2lnbmVkIGludCB3b3JkMTsKKwl1bnNpZ25lZCBpbnQgd29yZDI7CisJdW5zaWduZWQgaW50IHdvcmQzOworfSBORVRBUk1fRE1BX0J1ZmZfRGVzY19NX3RvX00sICpwTkVUQVJNX0RNQV9CdWZmX0Rlc2NfTV90b19NIDsKKworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L25ldGFybV9lbmlfbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L25ldGFybV9lbmlfbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3YjM1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbmV0YXJtX2VuaV9tb2R1bGUuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybW5vbW11L2FyY2gtbmV0YXJtL25ldGFybV9lbmlfbW9kdWxlLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTkVUc2lsaWNvbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAwIFdpcmVTcGVlZCBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYnkgV2lyZVNwZWVkLiBMSUNFTlNFRSBhZ3JlZXMgdGhhdAorICogaXQgd2lsbCBub3QgZGVsZXRlIHRoaXMgY29weXJpZ2h0IG5vdGljZSwgdHJhZGVtYXJrcyBvciBwcm90ZWN0aXZlCisgKiBub3RpY2VzIGZyb20gYW55IGNvcHkgbWFkZSBieSBMSUNFTlNFRS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUy1JUyIgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkKKyAqIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorICogcHVycG9zZSByZWdhcmRpbmcgdGhpcyBzb2Z0d2FyZS4gSW4gbm8gZXZlbnQgc2hhbGwgV2lyZVNwZWVkCisgKiBiZSBsaWFibGUgZm9yIGFueSBpbmRpcmVjdCwgY29uc2VxdWVudGlhbCwgb3IgaW5jaWRlbnRhbCBkYW1hZ2VzLAorICogbG9zcyBvZiBwcm9maXRzIG9yIHJldmVudWUsIGxvc3Mgb2YgdXNlIG9yIGRhdGEsIG9yIGludGVycnVwdGlvbgorICogb2YgYnVzaW5lc3MsIHdoZXRoZXIgdGhlIGFsbGVnZWQgZGFtYWdlcyBhcmUgbGFiZWxlZCBpbiBjb250cmFjdCwKKyAqIHRvcnQsIG9yIGluZGVtbml0eS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogYXV0aG9yKHMpIDogRGF2aWQgU21pdGgKKyAqLworCisjaWZuZGVmIF9fTkVUQVJNX0VOSV9NT0RVTEVfUkVHSVNURVJTX0gKKyNkZWZpbmUgX19ORVRBUk1fRU5JX01PRFVMRV9SRUdJU1RFUlNfSAorCisvKiBFTkkgdW5pdCByZWdpc3RlciBvZmZzZXRzICovCisKKy8qICNpZmRlZiBDT05GSUdfQVJDSF9ORVRBUk0gKi8KKyNkZWZpbmUJTkVUQVJNX0VOSV9NT0RVTEVfQkFTRQkJKDB4RkZBMDAwMDApCisvKiAjZW5kaWYgLyAqIENPTkZJR19BUkNIX05FVEFSTSAqLworCisjZGVmaW5lIGdldF9lbmlfcmVnX2FkZHIoYykgKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoTkVUQVJNX0VOSV9NT0RVTEVfQkFTRSArIChjKSkpCisjZGVmaW5lIGdldF9lbmlfY3RsX3JlZ19hZGRyKG1pbm9yKSBcCisJKGdldF9lbmlfcmVnX2FkZHIoTkVUQVJNX0VOSV8xMjg0X1BPUlQxX0NPTlRST0wpICsgKG1pbm9yKSkKKworI2RlZmluZQlORVRBUk1fRU5JX0dFTkVSQUxfQ09OVFJPTAkoMHgwMCkKKyNkZWZpbmUJTkVUQVJNX0VOSV9TVEFUVVNfQ09OVFJPTAkoMHgwNCkKKyNkZWZpbmUJTkVUQVJNX0VOSV9GSUZPX01PREVfREFUQQkoMHgwOCkKKworI2RlZmluZQlORVRBUk1fRU5JXzEyODRfUE9SVDFfQ09OVFJPTAkoMHgxMCkKKyNkZWZpbmUJTkVUQVJNX0VOSV8xMjg0X1BPUlQyX0NPTlRST0wJKDB4MTQpCisjZGVmaW5lCU5FVEFSTV9FTklfMTI4NF9QT1JUM19DT05UUk9MCSgweDE4KQorI2RlZmluZQlORVRBUk1fRU5JXzEyODRfUE9SVDRfQ09OVFJPTAkoMHgxYykKKworI2RlZmluZQlORVRBUk1fRU5JXzEyODRfQ0hBTk5FTDFfREFUQQkoMHgyMCkKKyNkZWZpbmUJTkVUQVJNX0VOSV8xMjg0X0NIQU5ORUwyX0RBVEEJKDB4MjQpCisjZGVmaW5lCU5FVEFSTV9FTklfMTI4NF9DSEFOTkVMM19EQVRBCSgweDI4KQorI2RlZmluZQlORVRBUk1fRU5JXzEyODRfQ0hBTk5FTDRfREFUQQkoMHgyYykKKworI2RlZmluZQlORVRBUk1fRU5JX0VOSV9DT05UUk9MCQkoMHgzMCkKKyNkZWZpbmUJTkVUQVJNX0VOSV9FTklfUFVMU0VEX0lOVFIJKDB4MzQpCisjZGVmaW5lCU5FVEFSTV9FTklfRU5JX1NIQVJFRF9SQU1fQUREUgkoMHgzOCkKKyNkZWZpbmUJTkVUQVJNX0VOSV9FTklfU0hBUkVECQkoMHgzYykKKworLyogc2VsZWN0IGJpdGZpZWxkIGRlZmludGlvbnMgKi8KKworLyogR2VuZXJhbCBDb250cm9sIFJlZ2lzdGVyICgweEZGQTBfMDAwMCkgKi8KKworI2RlZmluZSBORVRBUk1fRU5JX0dDUl9FTklNT0RFX0lFRUUxMjg0CSgweDAwMDAwMDAxKQorI2RlZmluZSBORVRBUk1fRU5JX0dDUl9FTklNT0RFX1NIUkFNMTYJKDB4MDAwMDAwMDQpCisjZGVmaW5lIE5FVEFSTV9FTklfR0NSX0VOSU1PREVfU0hSQU04CSgweDAwMDAwMDA1KQorI2RlZmluZSBORVRBUk1fRU5JX0dDUl9FTklNT0RFX0ZJRk8xNgkoMHgwMDAwMDAwNikKKyNkZWZpbmUgTkVUQVJNX0VOSV9HQ1JfRU5JTU9ERV9GSUZPOAkoMHgwMDAwMDAwNykKKworI2RlZmluZSBORVRBUk1fRU5JX0dDUl9FTklNT0RFX01BU0sJKDB4MDAwMDAwMDcpCisKKy8qIElFRUUgMTI4NCBQb3J0IENvbnRyb2wgUmVnaXN0ZXJzIDEtNCAoMHhGRkEwXzAwMTAsIDB4RkZBMF8wMDE0LAorICAgMHhGRkEwXzAwMTgsIDB4RkZBMF8wMDFjKSAqLworCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX1BPUlRfRU5BQkxFCSgweDgwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19ETUFfRU5BQkxFCSgweDQwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19PQkVfSU5UX0VOCSgweDIwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19BQ0tfSU5UX0VOCSgweDEwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19FQ1BfTU9ERQkoMHgwODAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfTE9PUEJBQ0tfTU9ERQkoMHgwNDAwMDAwMCkKKworI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19TVFJPQkVfVElNRTAJKDB4MDAwMDAwMDApIC8qIDAuNSB1UyAqLworI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19TVFJPQkVfVElNRTEJKDB4MDEwMDAwMDApIC8qIDEuMCB1UyAqLworI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19TVFJPQkVfVElNRTIJKDB4MDIwMDAwMDApIC8qIDUuMCB1UyAqLworI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19TVFJPQkVfVElNRTMJKDB4MDMwMDAwMDApIC8qIDEwLjAgdVMgKi8KKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfU1RST0JFX01BU0sJKDB4MDMwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfTUFOX1NUUk9CRV9FTgkoMHgwMDgwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfRkFTVF9NT0RFCSgweDAwNDAwMDAwKQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19CSURJUl9NT0RFCSgweDAwMjAwMDAwKQorCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX01BTl9TVFJPQkUJKDB4MDAwODAwMDApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX0FVVE9fRkVFRAkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfSU5JVAkJKDB4MDAwMjAwMDApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX0hTRUxFQ1QJKDB4MDAwMTAwMDApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX0ZFX0lOVF9FTgkoMHgwMDAwODAwMCkKKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfRVBQX01PREUJKDB4MDAwMDQwMDApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX0lCUl9JTlRfRU4JKDB4MDAwMDIwMDApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX0lCUgkJKDB4MDAwMDEwMDApCisKKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfUlhGREJfMUJZVEUJKDB4MDAwMDA0MDApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX1JYRkRCXzJCWVRFCSgweDAwMDAwODAwKQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19SWEZEQl8zQllURQkoMHgwMDAwMGMwMCkKKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfUlhGREJfNEJZVEUJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0VOSV8xMjg0UENfUkJDQwkJKDB4MDAwMDAyMDApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX1JCQ1QJCSgweDAwMDAwMTAwKQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19BQ0sJCSgweDAwMDAwMDgwKQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19GSUZPX0UJKDB4MDAwMDAwNDApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX09CRQkJKDB4MDAwMDAwMjApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX0FDS19JTlQJKDB4MDAwMDAwMTApCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX0JVU1kJCSgweDAwMDAwMDA4KQorI2RlZmluZSBORVRBUk1fRU5JXzEyODRQQ19QRQkJKDB4MDAwMDAwMDQpCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX1BTRUxFQ1QJKDB4MDAwMDAwMDIpCisjZGVmaW5lIE5FVEFSTV9FTklfMTI4NFBDX0ZBVUxUCQkoMHgwMDAwMDAwMSkKKworI2VuZGlmIC8qIF9fTkVUQVJNX0VOSV9NT0RVTEVfUkVHSVNURVJTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbmV0YXJtX2V0aF9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbmV0YXJtX2V0aF9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjJmMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtNzIwdC9uZXRhcm1fZXRoX21vZHVsZS5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtbm9tbXUvYXJjaC1uZXRhcm0vbmV0YXJtX2V0aF9tb2R1bGUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBORVRzaWxpY29uLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgV2lyZVNwZWVkIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCBieSBXaXJlU3BlZWQuIExJQ0VOU0VFIGFncmVlcyB0aGF0CisgKiBpdCB3aWxsIG5vdCBkZWxldGUgdGhpcyBjb3B5cmlnaHQgbm90aWNlLCB0cmFkZW1hcmtzIG9yIHByb3RlY3RpdmUKKyAqIG5vdGljZXMgZnJvbSBhbnkgY29weSBtYWRlIGJ5IExJQ0VOU0VFLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudGllcyBvciBjb25kaXRpb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFueQorICogaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyCisgKiBwdXJwb3NlIHJlZ2FyZGluZyB0aGlzIHNvZnR3YXJlLiBJbiBubyBldmVudCBzaGFsbCBXaXJlU3BlZWQKKyAqIGJlIGxpYWJsZSBmb3IgYW55IGluZGlyZWN0LCBjb25zZXF1ZW50aWFsLCBvciBpbmNpZGVudGFsIGRhbWFnZXMsCisgKiBsb3NzIG9mIHByb2ZpdHMgb3IgcmV2ZW51ZSwgbG9zcyBvZiB1c2Ugb3IgZGF0YSwgb3IgaW50ZXJydXB0aW9uCisgKiBvZiBidXNpbmVzcywgd2hldGhlciB0aGUgYWxsZWdlZCBkYW1hZ2VzIGFyZSBsYWJlbGVkIGluIGNvbnRyYWN0LAorICogdG9ydCwgb3IgaW5kZW1uaXR5LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBhdXRob3IocykgOiBKYWNraWUgU21pdGggQ2FzaGlvbgorICogICAgICAgICAgICAgRGF2aWQgU21pdGgKKyAqLworCisjaWZuZGVmIF9fTkVUQVJNX0VUSF9NT0RVTEVfUkVHSVNURVJTX0gKKyNkZWZpbmUgX19ORVRBUk1fRVRIX01PRFVMRV9SRUdJU1RFUlNfSAorCisvKiBFVEggdW5pdCByZWdpc3RlciBvZmZzZXRzICovCisKKyNkZWZpbmUJTkVUQVJNX0VUSF9NT0RVTEVfQkFTRQkJKDB4RkY4MDAwMDApCisKKyNkZWZpbmUgZ2V0X2V0aF9yZWdfYWRkcihjKSAoKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShORVRBUk1fRVRIX01PRFVMRV9CQVNFICsgKGMpKSkKKworI2RlZmluZSBORVRBUk1fRVRIX0dFTl9DVFJMCQkoMHgwMDApIC8qIEV0aGVybmV0IEdlbiBDb250cm9sIFJlZyAqLworI2RlZmluZSBORVRBUk1fRVRIX0dFTl9TVEFUCQkoMHgwMDQpIC8qIEV0aGVybmV0IEdlbiBTdGF0dXMgUmVnICovCisjZGVmaW5lIE5FVEFSTV9FVEhfRklGT19EQVQxICAgICAgICAgICAgKDB4MDA4KSAvKiBGaWZvIERhdGEgUmVnIDEgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9GSUZPX0RBVDIgICAgICAgICAgICAoMHgwMEMpIC8qIEZpZm8gRGF0YSBSZWcgMiAqLworI2RlZmluZSBORVRBUk1fRVRIX1RYX1NUQVQgICAgICAgICAgICAgICgweDAxMCkgLyogVHJhbnNtaXQgU3RhdHVzIFJlZyAqLworI2RlZmluZSBORVRBUk1fRVRIX1JYX1NUQVQgICAgICAgICAgICAgICgweDAxNCkgLyogUmVjZWl2ZSBTdGF0dXMgUmVnICovCisKKyNkZWZpbmUgTkVUQVJNX0VUSF9NQUNfQ0ZHCQkoMHg0MDApIC8qIE1BQyBDb25maWd1cmF0aW9uIFJlZyAqLworI2RlZmluZSBORVRBUk1fRVRIX1BDU19DRkcJCSgweDQwOCkgLyogUENTIENvbmZpZ3VyYXRpb24gUmVnICovCisjZGVmaW5lIE5FVEFSTV9FVEhfU1RMX0NGRwkJKDB4NDEwKSAvKiBTVEwgQ29uZmlndXJhdGlvbiBSZWcgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9CMkJfSVBHX0dBUF9UTVIJKDB4NDQwKSAvKiBCYWNrLXRvLWJhY2sgSVBHCisJCQkJCQkgICBHYXAgVGltZXIgUmVnICovCisjZGVmaW5lIE5FVEFSTV9FVEhfTkIyQl9JUEdfR0FQX1RNUgkoMHg0NDQpIC8qIE5vbiBCYWNrLXRvLWJhY2sKKwkJCQkJCSAgIElQRyBHYXAgVGltZXIgUmVnICovCisjZGVmaW5lIE5FVEFSTV9FVEhfTUlJX0NNRAkJKDB4NTQwKSAvKiBNSUkgKFBIWSkgQ29tbWFuZCBSZWcgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9NSUlfQUREUgkJKDB4NTQ0KSAvKiBNSUkgQWRkcmVzcyBSZWcgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9NSUlfV1JJVEUJCSgweDU0OCkgLyogTUlJIFdyaXRlIERhdGEgUmVnICovCisjZGVmaW5lIE5FVEFSTV9FVEhfTUlJX1JFQUQJCSgweDU0QykgLyogTUlJIFJlYWQgRGF0YSBSZWcgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9NSUlfSU5ECQkoMHg1NTApIC8qIE1JSSBJbmRpY2F0b3JzIFJlZyAqLworI2RlZmluZSBORVRBUk1fRVRIX01JQl9DUkNFQwkJKDB4NTgwKSAvKiAoTUlCKSBDUkMgRXJyb3IgQ291bnRlciAqLworI2RlZmluZSBORVRBUk1fRVRIX01JQl9BRUMJCSgweDU4NCkgLyogQWxpZ25tZW50IEVycm9yIENvdW50ZXIgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9NSUJfQ0VDCQkoMHg1ODgpIC8qIENvZGUgRXJyb3IgQ291bnRlciAqLworI2RlZmluZSBORVRBUk1fRVRIX01JQl9MRkMJCSgweDU4QykgLyogTG9uZyBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIE5FVEFSTV9FVEhfTUlCX1NGQwkJKDB4NTkwKSAvKiBTaG9ydCBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIE5FVEFSTV9FVEhfTUlCX0xDQwkJKDB4NTk0KSAvKiBMYXRlIENvbGxpc2lvbiBDb3VudGVyICovCisjZGVmaW5lIE5FVEFSTV9FVEhfTUlCX0VEQwkJKDB4NTk4KSAvKiBFeGNlc3NpdmUgRGVmZXJyYWwKKwkJCQkJCSAgIENvdW50ZXIgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9NSUJfTUNDCQkoMHg1OUMpIC8qIE1heGltdW0gQ29sbGlzaW9uIENvdW50ZXIgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9TQUxfRklMVEVSCQkoMHg1QzApIC8qIFNBTCBTdGF0aW9uIEFkZHJlc3MKKwkJCQkJCSAgIEZpbHRlciBSZWcgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9TQUxfU1RBVElPTl9BRERSXzEJKDB4NUM0KSAvKiBTQUwgU3RhdGlvbiBBZGRyZXNzCisJCQkJCQkgICBSZWcgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9TQUxfU1RBVElPTl9BRERSXzIJKDB4NUM4KQorI2RlZmluZSBORVRBUk1fRVRIX1NBTF9TVEFUSU9OX0FERFJfMwkoMHg1Q0MpCisjZGVmaW5lIE5FVEFSTV9FVEhfU0FMX0hBU0hfVEJMXzEJKDB4NUQwKSAvKiBTQUwgTXVsdGljYXN0IEhhc2ggVGFibGUqLworI2RlZmluZSBORVRBUk1fRVRIX1NBTF9IQVNIX1RCTF8yCSgweDVENCkKKyNkZWZpbmUgTkVUQVJNX0VUSF9TQUxfSEFTSF9UQkxfMwkoMHg1RDgpCisjZGVmaW5lIE5FVEFSTV9FVEhfU0FMX0hBU0hfVEJMXzQJKDB4NURDKQorCisvKiBzZWxlY3QgYml0ZmllbGQgZGVmaW50aW9ucyAqLworCisvKiBFdGhlcm5ldCBHZW5lcmFsIENvbnRyb2wgUmVnaXN0ZXIgKDB4RkY4MF8wMDAwKSAqLworCisjZGVmaW5lIE5FVEFSTV9FVEhfR0NSX0VSWAkJKDB4ODAwMDAwMDApIC8qIEVuYWJsZSBSZWNlaXZlIEZJRk8gKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9HQ1JfRVJYRE1BCQkoMHg0MDAwMDAwMCkgLyogRW5hYmxlIFJlY2VpdmUgRE1BICovCisjZGVmaW5lIE5FVEFSTV9FVEhfR0NSX0VUWAkJKDB4MDA4MDAwMDApIC8qIEVuYWJsZSBUcmFuc21pdCBGSUZPICovCisjZGVmaW5lIE5FVEFSTV9FVEhfR0NSX0VUWERNQQkJKDB4MDA0MDAwMDApIC8qIEVuYWJsZSBUcmFuc21pdCBETUEgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9HQ1JfRVRYV01fNTAJCSgweDAwMTAwMDAwKSAvKiBUcmFuc21pdCBGSUZPIFdhdGVyCisJCQkJCQkJTWFyay4gIFN0YXJ0IHRyYW5zbWl0CisJCQkJCQkJd2hlbiBGSUZPIGlzIDUwJQorCQkJCQkJCWZ1bGwuICovCisjZGVmaW5lIE5FVEFSTV9FVEhfR0NSX1BOQQkJKDB4MDAwMDA0MDApIC8qIHBTT1MgcE5BIEJ1ZmZlcgorCQkJCQkJCURlc2NyaXB0b3IgRm9ybWF0ICovCisKKy8qIEV0aGVybmV0IEdlbmVyYWwgU3RhdHVzIFJlZ2lzdGVyICgweEZGODBfMDAwNCkgKi8KKworI2RlZmluZSBORVRBUk1fRVRIX0dTVF9SWEZEQiAgICAgICAgICAgICgweDMwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRVRIX0dTVF9SWFJFR1IJCSgweDA4MDAwMDAwKSAvKiBSZWNlaXZlIFJlZ2lzdGVyCisJCQkJCQkJUmVhZHkgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9HU1RfUlhGSUZPSAkJKDB4MDQwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9FVEhfR1NUX1JYQlIJCSgweDAyMDAwMDAwKQorI2RlZmluZSBORVRBUk1fRVRIX0dTVF9SWFNLSVAJCSgweDAxMDAwMDAwKQorCisjZGVmaW5lIE5FVEFSTV9FVEhfR1NUX1RYQkMgICAgICAgICAgICAgKDB4MDAwMjAwMDApCisKKworLyogRXRoZXJuZXQgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyICgweEZGODBfMDAxMCkgKi8KKworI2RlZmluZSBORVRBUk1fRVRIX1RYU1RBVF9UWE9LICAgICAgICAgICgweDAwMDA4MDAwKQorCisKKy8qIEV0aGVybmV0IFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyICgweEZGODBfMDAxNCkgKi8KKworI2RlZmluZSBORVRBUk1fRVRIX1JYU1RBVF9TSVpFICAgICAgICAgICgweEZGRkYwMDAwKQorI2RlZmluZSBORVRBUk1fRVRIX1JYU1RBVF9SWE9LICAgICAgICAgICgweDAwMDAyMDAwKQorCisKKy8qIFBDUyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICgweEZGODBfMDQwOCkgKi8KKworI2RlZmluZSBORVRBUk1fRVRIX1BDU0NfTk9DRlIJCSgweDEpIC8qIERpc2FibGUgQ2lwaGVyaW5nICovCisjZGVmaW5lIE5FVEFSTV9FVEhfUENTQ19FTkpBQgkJKDB4MikgLyogRW5hYmxlIEphYmJlciBQcm90ZWN0aW9uICovCisjZGVmaW5lIE5FVEFSTV9FVEhfUENTQ19DTEtTXzI1TQkoMHgwKSAvKiAyNSBNSHogQ2xvY2sgU3BlZWQgU2VsZWN0ICovCisjZGVmaW5lIE5FVEFSTV9FVEhfUENTQ19DTEtTXzMzTQkoMHg0KSAvKiAzMyBNSHogQ2xvY2sgU3BlZWQgU2VsZWN0ICovCisKKy8qIFNUTCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICgweEZGODBfMDQxMCkgKi8KKworI2RlZmluZSBORVRBUk1fRVRIX1NUTENfUlhFTgkJKDB4MikgLyogRW5hYmxlIFBhY2tldCBSZWNlaXZlciAqLworI2RlZmluZSBORVRBUk1fRVRIX1NUTENfQVVUT1oJCSgweDQpIC8qIEF1dG8gWmVybyBTdGF0aXN0aWNzICovCisKKy8qIE1BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICgweEZGODBfMDQwMCkgKi8KKworI2RlZmluZSBORVRBUk1fRVRIX01BQ0NfSFVHRU4JCSgweDEpIC8qIEVuYWJsZSBVbmxpbWl0ZWQgVHJhbnNtaXQKKwkJCQkJCSBGcmFtZSBTaXplcyAqLworI2RlZmluZSBORVRBUk1fRVRIX01BQ0NfUEFERU4JCSgweDQpIC8qIEF1dG9tYXRpYyBQYWQgRmlsbCBGcmFtZXMKKwkJCQkJCSB0byA2NCBCeXRlcyAqLworI2RlZmluZSBORVRBUk1fRVRIX01BQ0NfQ1JDRU4JCSgweDgpIC8qIEFwcGVuZCBDUkMgdG8gVHJhbnNtaXQKKwkJCQkJCSBGcmFtZXMgKi8KKworLyogTUlJIChQSFkpIENvbW1hbmQgUmVnaXN0ZXIgKDB4RkY4MF8wNTQwKSAqLworCisjZGVmaW5lIE5FVEFSTV9FVEhfTUlJQ19SU1RBVAkJKDB4MSkgLyogU2luZ2xlIFNjYW4gZm9yIFJlYWQgRGF0YSAqLworCisvKiBNSUkgSW5kaWNhdG9ycyBSZWdpc3RlciAoMHhGRjgwXzA1NTApICovCisKKyNkZWZpbmUgTkVUQVJNX0VUSF9NSUlJX0JVU1kJCSgweDEpIC8qIE1JSSBJL0YgQnVzeSB3aXRoCisJCQkJCQkgUmVhZC9Xcml0ZSAqLworCisvKiBTQUwgU3RhdGlvbiBBZGRyZXNzIEZpbHRlciBSZWdpc3RlciAoMHhGRjgwXzA1QzApICovCisKKyNkZWZpbmUgTkVUQVJNX0VUSF9TQUxGX1BSTwkJKDB4OCkgLyogRW5hYmxlIFByb21pc2N1b3VzIE1vZGUgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9TQUxGX1BSTQkJKDB4NCkgLyogQWNjZXB0IEFsbCBNdWx0aWNhc3QKKwkJCQkJCSBQYWNrZXRzICovCisjZGVmaW5lIE5FVEFSTV9FVEhfU0FMRl9QUkEJCSgweDIpIC8qIEFjY2VwdCBNdWxpdGNhc3QgUGFja2V0cworCQkJCQkJIHVzaW5nIEhhc2ggVGFibGUgKi8KKyNkZWZpbmUgTkVUQVJNX0VUSF9TQUxGX0JST0FECQkoMHgxKSAvKiBBY2NlcHQgQWxsIEJyb2FkY2FzdAorCQkJCQkJIFBhY2tldHMgKi8KKworCisjZW5kaWYgLyogX19ORVRBUk1fR0VOX01PRFVMRV9SRUdJU1RFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtNzIwdC9uZXRhcm1fZ2VuX21vZHVsZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtNzIwdC9uZXRhcm1fZ2VuX21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjVjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L25ldGFybV9nZW5fbW9kdWxlLmgKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm1ub21tdS9hcmNoLW5ldGFybS9uZXRhcm1fZ2VuX21vZHVsZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIE5FVHNpbGljb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBSZWQgSGF0LCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCBieSBSZWQgSGF0LiBMSUNFTlNFRSBhZ3JlZXMgdGhhdAorICogaXQgd2lsbCBub3QgZGVsZXRlIHRoaXMgY29weXJpZ2h0IG5vdGljZSwgdHJhZGVtYXJrcyBvciBwcm90ZWN0aXZlCisgKiBub3RpY2VzIGZyb20gYW55IGNvcHkgbWFkZSBieSBMSUNFTlNFRS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUy1JUyIgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkKKyAqIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorICogcHVycG9zZSByZWdhcmRpbmcgdGhpcyBzb2Z0d2FyZS4gSW4gbm8gZXZlbnQgc2hhbGwgUmVkIEhhdAorICogYmUgbGlhYmxlIGZvciBhbnkgaW5kaXJlY3QsIGNvbnNlcXVlbnRpYWwsIG9yIGluY2lkZW50YWwgZGFtYWdlcywKKyAqIGxvc3Mgb2YgcHJvZml0cyBvciByZXZlbnVlLCBsb3NzIG9mIHVzZSBvciBkYXRhLCBvciBpbnRlcnJ1cHRpb24KKyAqIG9mIGJ1c2luZXNzLCB3aGV0aGVyIHRoZSBhbGxlZ2VkIGRhbWFnZXMgYXJlIGxhYmVsZWQgaW4gY29udHJhY3QsCisgKiB0b3J0LCBvciBpbmRlbW5pdHkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIGF1dGhvcihzKSA6IEpvZSBkZUJsYXF1aWVyZQorICovCisKKyNpZm5kZWYgX19ORVRBUk1fR0VOX01PRFVMRV9SRUdJU1RFUlNfSAorI2RlZmluZSBfX05FVEFSTV9HRU5fTU9EVUxFX1JFR0lTVEVSU19ICisKKy8qIEdFTiB1bml0IHJlZ2lzdGVyIG9mZnNldHMgKi8KKworI2RlZmluZQlORVRBUk1fR0VOX01PRFVMRV9CQVNFCQkoMHhGRkIwMDAwMCkKKworI2RlZmluZSBnZXRfZ2VuX3JlZ19hZGRyKGMpICgodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKE5FVEFSTV9HRU5fTU9EVUxFX0JBU0UgKyAoYykpKQorCisjZGVmaW5lCU5FVEFSTV9HRU5fU1lTVEVNX0NPTlRST0wJKDB4MDApCisjZGVmaW5lCU5FVEFSTV9HRU5fU1RBVFVTX0NPTlRST0wJKDB4MDQpCisjZGVmaW5lCU5FVEFSTV9HRU5fUExMX0NPTlRST0wJCSgweDA4KQorI2RlZmluZQlORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0UJKDB4MGMpCisKKyNkZWZpbmUJTkVUQVJNX0dFTl9USU1FUjFfQ09OVFJPTAkoMHgxMCkKKyNkZWZpbmUJTkVUQVJNX0dFTl9USU1FUjFfU1RBVFVTCSgweDE0KQorI2RlZmluZQlORVRBUk1fR0VOX1RJTUVSMl9DT05UUk9MCSgweDE4KQorI2RlZmluZQlORVRBUk1fR0VOX1RJTUVSMl9TVEFUVVMJKDB4MWMpCisKKyNkZWZpbmUJTkVUQVJNX0dFTl9QT1JUQQkJKDB4MjApCisjZGVmaW5lCU5FVEFSTV9HRU5fUE9SVEIJCSgweDI0KQorI2RlZmluZQlORVRBUk1fR0VOX1BPUlRDCQkoMHgyOCkKKworI2RlZmluZQlORVRBUk1fR0VOX0lOVFJfRU5BQkxFCQkoMHgzMCkKKyNkZWZpbmUJTkVUQVJNX0dFTl9JTlRSX0VOQUJMRV9TRVQJKDB4MzQpCisjZGVmaW5lCU5FVEFSTV9HRU5fSU5UUl9FTkFCTEVfQ0xSCSgweDM4KQorI2RlZmluZQlORVRBUk1fR0VOX0lOVFJfU1RBVFVTX0VOCSgweDM0KQorI2RlZmluZQlORVRBUk1fR0VOX0lOVFJfU1RBVFVTX1JBVwkoMHgzOCkKKworI2RlZmluZQlORVRBUk1fR0VOX0NBQ0hFX0NPTlRST0wxCSgweDQwKQorI2RlZmluZQlORVRBUk1fR0VOX0NBQ0hFX0NPTlRST0wyCSgweDQ0KQorCisvKiBzZWxlY3QgYml0ZmllbGQgZGVmaW5pdGlvbnMgKi8KKworLyogU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgKCAweEZGQjBfMDAwMCApICovCisKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX0xFTkRJQU4JKDB4ODAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19CRU5ESUFOCSgweDAwMDAwMDAwKQorCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19CVVNRUlRSCSgweDAwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fR0VOX1NZU19DRkdfQlVTSEFMRgkoMHgyMDAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU0ZVTEwJKDB4NDAwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX0JDTEtfRElTQUJMRQkoMHgxMDAwMDAwMCkKKworI2RlZmluZSBORVRBUk1fR0VOX1NZU19DRkdfV0RPR19FTgkoMHgwMTAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX1dET0dfSVJRCSgweDAwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fR0VOX1NZU19DRkdfV0RPR19GSVEJKDB4MDA0MDAwMDApCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19XRE9HX1JTVAkoMHgwMDgwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX1dET0dfMjQJKDB4MDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19XRE9HXzI2CSgweDAwMTAwMDAwKQorI2RlZmluZSBORVRBUk1fR0VOX1NZU19DRkdfV0RPR18yOAkoMHgwMDIwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX1dET0dfMjkJKDB4MDAzMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU01PTl9FTgkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU01PTl8xMjgJKDB4MDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19CVVNNT05fNjQJKDB4MDAwMTAwMDApCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19CVVNNT05fMzIJKDB4MDAwMjAwMDApCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19CVVNNT05fMTYJKDB4MDAwMzAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX1VTRVJfRU4JKDB4MDAwMDgwMDApCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19CVVNFUl9FTgkoMHgwMDAwNDAwMCkKKworI2RlZmluZSBORVRBUk1fR0VOX1NZU19DRkdfQlVTQVJCX0lOVAkoMHgwMDAwMjAwMCkKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU0FSQl9FWFQJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX0RNQVRTVAkoMHgwMDAwMTAwMCkKKworI2RlZmluZSBORVRBUk1fR0VOX1NZU19DRkdfVEVBTEFTVAkoMHgwMDAwMDgwMCkKKworI2RlZmluZSBORVRBUk1fR0VOX1NZU19DRkdfQUxJR05fQUJPUlQJKDB4MDAwMDA0MDApCisKKyNkZWZpbmUgTkVUQVJNX0dFTl9TWVNfQ0ZHX0NBQ0hFX0VOCSgweDAwMDAwMjAwKQorCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19XUklfQlVGX0VOCSgweDAwMDAwMTAwKQorCisjZGVmaW5lIE5FVEFSTV9HRU5fU1lTX0NGR19DQUNIRV9JTklUCSgweDAwMDAwMDgwKQorCisvKiBQTEwgQ29udHJvbCBSZWdpc3RlciAoIDB4RkZCMF8wMDA4ICkgKi8KKworI2RlZmluZSBORVRBUk1fR0VOX1BMTF9DVExfUExMQ05UX01BU0sJKDB4MEYwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX0dFTl9QTExfQ1RMX1BMTENOVCh4KQkoKCh4KTw8MjQpICYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRBUk1fR0VOX1BMTF9DVExfUExMQ05UX01BU0spCisKKy8qIERlZmF1bHRzIGZvciBQT0xUU1QgYW5kIElDUCBGaWVsZHMgaW4gUExMIENUTCAqLworI2RlZmluZSBORVRBUk1fR0VOX1BMTF9DVExfT1VURElWKHgpICAgICh4KQorI2RlZmluZSBORVRBUk1fR0VOX1BMTF9DVExfSU5ESVYoeCkgICAgICgoeCk8PDYpCisjZGVmaW5lIE5FVEFSTV9HRU5fUExMX0NUTF9QT0xUU1RfREVGICAgKDB4MDAwMDBFMDApCisjZGVmaW5lIE5FVEFSTV9HRU5fUExMX0NUTF9JQ1BfREVGICAgICAgKDB4MDAwMDAwM0MpCisKKworLyogU29mdHdhcmUgU2VydmljZSBSZWdpc3RlciAoIDB4RkZCMF8wMDBDICkgKi8KKworI2RlZmluZQlORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEJKDB4MTIzKQorI2RlZmluZQlORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEIJKDB4MzIxKQorCisvKiBQT1JUIEMgUmVnaXN0ZXIgKCAweEZGQjBfMDAyOCApICovCisKKyNkZWZpbmUJTkVUQVJNX0dFTl9QT1JUX01PREUoeCkJCSgoKHgpPDwyNCkgKyAoMHhGRjAwKSkKKyNkZWZpbmUJTkVUQVJNX0dFTl9QT1JUX0RJUih4KQkJKCgoeCk8PDE2KSArICgweEZGMDApKQorCisvKiBUaW1lciBSZWdpc3RlcnMgKCAweEZGQjBfMDAxMCAweEZGQjBfMDAxOCApICovCisKKyNkZWZpbmUJTkVUQVJNX0dFTl9UQ1RMX0VOQUJMRQkJKDB4ODAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9HRU5fVENUTF9JTlRfRU5BQkxFCSgweDQwMDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9HRU5fVENUTF9VU0VfSVJRCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX0dFTl9UQ1RMX1VTRV9GSVEJCSgweDIwMDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9HRU5fVENUTF9VU0VfUFJFU0NBTEUJKDB4MTAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9HRU5fVENUTF9JTklUX0NPVU5UKHgpCSgoeCkgJiAweDFGRikKKworI2RlZmluZQlORVRBUk1fR0VOX1RTVEFUX0lOVFBFTgkJKDB4NDAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9HRU5fVFNUQVRfQ1RDX01BU0sJKDB4MDAwMDAxRkYpCisKKy8qIHByZXNjYWxlIHRvIG1zZWNzIGNvbnZlcnNpb24gKi8KKworI2RlZmluZQlORVRBUk1fR0VOX1RJTUVSX01TRUNfUCh4KQkoICggKCAyMDQ4MCApICogKCAweDFGRiAtICggKHgpICYJICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUQVJNX0dFTl9UU1RBVF9DVENfTUFTSyApICsgICBcCisJCQkJCSAgICAxICkgKSAvIChORVRBUk1fWFRBTF9GUkVRLzEwMDApICkKKworI2RlZmluZQlORVRBUk1fR0VOX1RJTUVSX1NFVF9IWih4KQkoICggKChORVRBUk1fWFRBTF9GUkVRLygyMDQ4MCooeCkpKS0xKSAmIFwKKwkJCQkJICBORVRBUk1fR0VOX1RTVEFUX0NUQ19NQVNLICkgfCBcCisJCQkJCSAgTkVUQVJNX0dFTl9UQ1RMX1VTRV9QUkVTQ0FMRSApCisKKyNpZiAwCisvKiBpZmRlZiBDT05GSUdfTkVUQVJNX1BMTF9CWVBBU1MgZWxzZSAqLworI2Vycm9yIHRlc3QKKyNkZWZpbmUJTkVUQVJNX0dFTl9USU1FUl9NU0VDX1AoeCkJKCAoICggNDA5NiApICogKCAweDFGRiAtICggKHgpICYgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRBUk1fR0VOX1RTVEFUX0NUQ19NQVNLICkgKyAgIFwKKwkJCQkJICAgIDEgKSApIC8gKE5FVEFSTV9YVEFMX0ZSRVEvMTAwMCkgKQorCisjZGVmaW5lCU5FVEFSTV9HRU5fVElNRVJfU0VUX0haKHgpCSggKCAoKE5FVEFSTV9YVEFMX0ZSRVEvKDQwOTYqKHgpKSktMSkgJiBcCisJCQkJCSAgTkVUQVJNX0dFTl9UU1RBVF9DVENfTUFTSyApIHwgXAorCQkJCQkgIE5FVEFSTV9HRU5fVENUTF9VU0VfUFJFU0NBTEUgKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtNzIwdC9uZXRhcm1fbWVtX21vZHVsZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtNzIwdC9uZXRhcm1fbWVtX21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2E5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L25ldGFybV9tZW1fbW9kdWxlLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm1ub21tdS9hcmNoLW5ldGFybS9uZXRhcm1fbWVtX21vZHVsZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIE5FVHNpbGljb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBSZWQgSGF0LCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCBieSBSZWQgSGF0LiBMSUNFTlNFRSBhZ3JlZXMgdGhhdAorICogaXQgd2lsbCBub3QgZGVsZXRlIHRoaXMgY29weXJpZ2h0IG5vdGljZSwgdHJhZGVtYXJrcyBvciBwcm90ZWN0aXZlCisgKiBub3RpY2VzIGZyb20gYW55IGNvcHkgbWFkZSBieSBMSUNFTlNFRS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUy1JUyIgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkKKyAqIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorICogcHVycG9zZSByZWdhcmRpbmcgdGhpcyBzb2Z0d2FyZS4gSW4gbm8gZXZlbnQgc2hhbGwgUmVkIEhhdAorICogYmUgbGlhYmxlIGZvciBhbnkgaW5kaXJlY3QsIGNvbnNlcXVlbnRpYWwsIG9yIGluY2lkZW50YWwgZGFtYWdlcywKKyAqIGxvc3Mgb2YgcHJvZml0cyBvciByZXZlbnVlLCBsb3NzIG9mIHVzZSBvciBkYXRhLCBvciBpbnRlcnJ1cHRpb24KKyAqIG9mIGJ1c2luZXNzLCB3aGV0aGVyIHRoZSBhbGxlZ2VkIGRhbWFnZXMgYXJlIGxhYmVsZWQgaW4gY29udHJhY3QsCisgKiB0b3J0LCBvciBpbmRlbW5pdHkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIGF1dGhvcihzKSA6IEpvZSBkZUJsYXF1aWVyZQorICovCisKKyNpZm5kZWYgX19ORVRBUk1fTUVNX01PRFVMRV9SRUdJU1RFUlNfSAorI2RlZmluZSBfX05FVEFSTV9NRU1fTU9EVUxFX1JFR0lTVEVSU19ICisKKy8qIEdFTiB1bml0IHJlZ2lzdGVyIG9mZnNldHMgKi8KKworI2RlZmluZQlORVRBUk1fTUVNX01PRFVMRV9CQVNFCQkoMHhGRkMwMDAwMCkKKworI2RlZmluZQlORVRBUk1fTUVNX01PRFVMRV9DT05GSUcJKDB4MDApCisjZGVmaW5lCU5FVEFSTV9NRU1fQ1MwX0JBU0VfQUREUgkoMHgxMCkKKyNkZWZpbmUJTkVUQVJNX01FTV9DUzBfT1BUSU9OUwkJKDB4MTQpCisjZGVmaW5lCU5FVEFSTV9NRU1fQ1MxX0JBU0VfQUREUgkoMHgyMCkKKyNkZWZpbmUJTkVUQVJNX01FTV9DUzFfT1BUSU9OUwkJKDB4MjQpCisjZGVmaW5lCU5FVEFSTV9NRU1fQ1MyX0JBU0VfQUREUgkoMHgzMCkKKyNkZWZpbmUJTkVUQVJNX01FTV9DUzJfT1BUSU9OUwkJKDB4MzQpCisjZGVmaW5lCU5FVEFSTV9NRU1fQ1MzX0JBU0VfQUREUgkoMHg0MCkKKyNkZWZpbmUJTkVUQVJNX01FTV9DUzNfT1BUSU9OUwkJKDB4NDQpCisjZGVmaW5lCU5FVEFSTV9NRU1fQ1M0X0JBU0VfQUREUgkoMHg1MCkKKyNkZWZpbmUJTkVUQVJNX01FTV9DUzRfT1BUSU9OUwkJKDB4NTQpCisKKy8qIHNlbGVjdCBiaXRmaWVsZCBkZWZpbnRpb25zICovCisKKy8qIE1vZHVsZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICggMHhGRkMwXzAwMDAgKSAqLworCisjZGVmaW5lIE5FVEFSTV9NRU1fQ0ZHX1JFRlJfQ09VTlRfTUFTSwkoMHhGRjAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX01FTV9DRkdfUkVGUkVTSF9FTgkoMHgwMDgwMDAwMCkKKworI2RlZmluZSBORVRBUk1fTUVNX0NGR19SRUZSX0NZQ0xFXzhDTEtTCSgweDAwMDAwMDAwKQorI2RlZmluZSBORVRBUk1fTUVNX0NGR19SRUZSX0NZQ0xFXzZDTEtTCSgweDAwMjAwMDAwKQorI2RlZmluZSBORVRBUk1fTUVNX0NGR19SRUZSX0NZQ0xFXzVDTEtTCSgweDAwNDAwMDAwKQorI2RlZmluZSBORVRBUk1fTUVNX0NGR19SRUZSX0NZQ0xFXzRDTEtTCSgweDAwNjAwMDAwKQorCisjZGVmaW5lIE5FVEFSTV9NRU1fQ0ZHX1BPUlRDX0FNVVgJKDB4MDAxMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX01FTV9DRkdfQTI3X0FERFIJCSgweDAwMDgwMDAwKQorI2RlZmluZSBORVRBUk1fTUVNX0NGR19BMjdfQ1MwT0UJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX01FTV9DRkdfQTI2X0FERFIJCSgweDAwMDQwMDAwKQorI2RlZmluZSBORVRBUk1fTUVNX0NGR19BMjZfQ1MwV0UJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX01FTV9DRkdfQTI1X0FERFIJCSgweDAwMDIwMDAwKQorI2RlZmluZSBORVRBUk1fTUVNX0NGR19BMjVfQkxBU1QJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgTkVUQVJNX01FTV9DRkdfUE9SVENfQU1VWDIJKDB4MDAwMTAwMDApCisKKworLyogcmFuZ2Ugb24gdGhpcyBwZXJpb2QgaXMgYWJvdXQgMSB0byAyNzUgdXNlYyAod2l0aCAxOC40MzJNSHogY2xvY2spICAgKi8KKy8qIHRoZSBleHByZXNzaW9uIHdpbGwgcm91bmQgZG93biwgc28gbWFrZSBzdXJlIHRvIHJldmVyc2UgaXQgdG8gdmVyaWZ5ICovCisvKiBpdCBpcyB3aGF0IHlvdSB3YW50LiBwZXJpb2QgPSBbKCBjb3VudCArIDEgKSAqIDIwXSAvIEZjcnlzdGFsICAgICAgICAqLworLyogKG5vdGU6IEZ4dGFsID0gRmNyeXN0YWwvNSwgc2VlIEhXUmVmR3VpZGUgc2VjdGlvbnMgOC4yLjUgYW5kIDExLjMuMikgKi8KKworI2RlZmluZQlORVRBUk1fTUVNX1JFRlJfUEVSSU9EX1VTRUMocCkJKE5FVEFSTV9NRU1fQ0ZHX1JFRlJfQ09VTlRfTUFTSyAmIFwKKwkJCQkJICgoKCgoTkVUQVJNX1hUQUxfRlJFUS8oMTAwMCkpKnApLygyMDAwMCkgXAorCQkJCQkgICAgKSAtICgxKSApIDw8ICgyNCkpKQorCisjaWYgMAorLyogcmFuZ2Ugb24gdGhpcyBwZXJpb2QgaXMgYWJvdXQgMSB0byAyNzUgdXNlYyAod2l0aCAxOC40MzJNSHogY2xvY2spICovCisvKiB0aGUgZXhwcmVzc2lvbiB3aWxsIHJvdW5kIGRvd24sIHNvIG1ha2Ugc3VyZSB0byByZXZlcnNlIGl0IHRvdmVyaWZ5ICovCisvKiBpdCBpcyB3aGF0IHlvdSB3YW50LiBwZXJpb2QgPSBbKCBjb3VudCArIDEgKSAqIDRdIC8gRnh0YWwgICAgICAgICAgKi8KKworI2RlZmluZQlORVRBUk1fTUVNX1JFRlJfUEVSSU9EX1VTRUMocCkJKE5FVEFSTV9NRU1fQ0ZHX1JFRlJfQ09VTlRfTUFTSyAmIFwKKwkJCQkJICgoKCgoTkVUQVJNX1hUQUxfRlJFUS8oMTAwMCkpKnApLyg0MDAwKSBcCisJCQkJCSAgICApIC0gKDEpICkgPDwgKDI0KSkpCisjZW5kaWYKKworLyogQmFzZSBBZGRyZXNzIFJlZ2lzdGVycyAoMHhGRkMwXzAwWDApICovCisKKyNkZWZpbmUgTkVUQVJNX01FTV9CQVJfQkFTRV9NQVNLCSgweEZGRkZGMDAwKQorCisvKiBtYWNybyB0byBkZWZpbmUgYmFzZSAqLworCisjZGVmaW5lIE5FVEFSTV9NRU1fQkFSX0JBU0UoeCkJCSgoeCkgJiBORVRBUk1fTUVNX0JBUl9CQVNFX01BU0spCisKKyNkZWZpbmUgTkVUQVJNX01FTV9CQVJfRFJBTV9GUAkJKDB4MDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9NRU1fQkFSX0RSQU1fRURPCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTkVUQVJNX01FTV9CQVJfRFJBTV9TWU5DCSgweDAwMDAwMjAwKQorCisjZGVmaW5lIE5FVEFSTV9NRU1fQkFSX0RSQU1fTVVYX0lOVAkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX01FTV9CQVJfRFJBTV9NVVhfRVhUCSgweDAwMDAwMDgwKQorCisjZGVmaW5lIE5FVEFSTV9NRU1fQkFSX0RSQU1fTVVYX0JBTAkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX01FTV9CQVJfRFJBTV9NVVhfVU5CQUwJKDB4MDAwMDAwMjApCisKKyNkZWZpbmUgTkVUQVJNX01FTV9CQVJfMUJDTEtfSURMRQkoMHgwMDAwMDAxMCkKKworI2RlZmluZSBORVRBUk1fTUVNX0JBUl9EUkFNX1NFTAkJKDB4MDAwMDAwMDgpCisKKyNkZWZpbmUgTkVUQVJNX01FTV9CQVJfQlVSU1RfRU4JCSgweDAwMDAwMDA0KQorCisjZGVmaW5lIE5FVEFSTV9NRU1fQkFSX1dSVF9QUk9UCQkoMHgwMDAwMDAwMikKKworI2RlZmluZSBORVRBUk1fTUVNX0JBUl9WQUxJRAkJKDB4MDAwMDAwMDEpCisKKy8qIE9wdGlvbiBSZWdpc3RlcnMgKDB4RkZDMF8wMFg0KSAqLworCisvKiBtYWNybyB0byBkZWZpbmUgd2hpY2ggYml0cyBvZiB0aGUgYmFzZSBhcmUgc2lnbmlmaWNhbnQgKi8KKworI2RlZmluZSBORVRBUk1fTUVNX09QVF9CQVNFX1VTRSh4KQkoKHgpICYgTkVUQVJNX01FTV9CQVJfQkFTRV9NQVNLKQorCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUX1dBSVRfTUFTSwkoMHgwMDAwMEYwMCkKKworI2RlZmluZQlORVRBUk1fTUVNX09QVF9XQUlUX1NUQVRFUyh4KQkoKCh4KSA8PCA4ICkgJiBORVRBUk1fTUVNX09QVF9XQUlUX01BU0sgKQorCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUX0JDWUNfMQkJKDB4MDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUX0JDWUNfMgkJKDB4MDAwMDAwNDApCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUX0JDWUNfMwkJKDB4MDAwMDAwODApCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUX0JDWUNfNAkJKDB4MDAwMDAwQzApCisKKyNkZWZpbmUgTkVUQVJNX01FTV9PUFRfQlNJWkVfMgkJKDB4MDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUX0JTSVpFXzQJCSgweDAwMDAwMDEwKQorI2RlZmluZSBORVRBUk1fTUVNX09QVF9CU0laRV84CQkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTkVUQVJNX01FTV9PUFRfQlNJWkVfMTYJCSgweDAwMDAwMDMwKQorCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUXzMyQklUCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX01FTV9PUFRfMTZCSVQJCSgweDAwMDAwMDA0KQorI2RlZmluZSBORVRBUk1fTUVNX09QVF84QklUCQkoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTkVUQVJNX01FTV9PUFRfMzJCSVRfRVhUX0FDSwkoMHgwMDAwMDAwQykKKworI2RlZmluZSBORVRBUk1fTUVNX09QVF9CVVNfU0laRV9NQVNLCSgweDAwMDAwMDBDKQorCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUX1JFQURfQVNZTkMJKDB4MDAwMDAwMDApCisjZGVmaW5lIE5FVEFSTV9NRU1fT1BUX1JFQURfU1lOQwkoMHgwMDAwMDAwMikKKworI2RlZmluZSBORVRBUk1fTUVNX09QVF9XUklURV9BU1lOQwkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTkVUQVJNX01FTV9PUFRfV1JJVEVfU1lOQwkoMHgwMDAwMDAwMSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbmV0YXJtX3JlZ2lzdGVycy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtNzIwdC9uZXRhcm1fcmVnaXN0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxYTM3OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbmV0YXJtX3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uZXRhcm0vbmV0YXJtX3JlZ2lzdGVycy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIE5FVHNpbGljb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBXaXJlU3BlZWQgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodGVkIGJ5IFdpcmVTcGVlZC4gTElDRU5TRUUgYWdyZWVzIHRoYXQKKyAqIGl0IHdpbGwgbm90IGRlbGV0ZSB0aGlzIGNvcHlyaWdodCBub3RpY2UsIHRyYWRlbWFya3Mgb3IgcHJvdGVjdGl2ZQorICogbm90aWNlcyBmcm9tIGFueSBjb3B5IG1hZGUgYnkgTElDRU5TRUUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMtSVMiIGFuZCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYW55CisgKiBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIKKyAqIHB1cnBvc2UgcmVnYXJkaW5nIHRoaXMgc29mdHdhcmUuIEluIG5vIGV2ZW50IHNoYWxsIFdpcmVTcGVlZAorICogYmUgbGlhYmxlIGZvciBhbnkgaW5kaXJlY3QsIGNvbnNlcXVlbnRpYWwsIG9yIGluY2lkZW50YWwgZGFtYWdlcywKKyAqIGxvc3Mgb2YgcHJvZml0cyBvciByZXZlbnVlLCBsb3NzIG9mIHVzZSBvciBkYXRhLCBvciBpbnRlcnJ1cHRpb24KKyAqIG9mIGJ1c2luZXNzLCB3aGV0aGVyIHRoZSBhbGxlZ2VkIGRhbWFnZXMgYXJlIGxhYmVsZWQgaW4gY29udHJhY3QsCisgKiB0b3J0LCBvciBpbmRlbW5pdHkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIGF1dGhvcihzKSA6IEpvZSBkZUJsYXF1aWVyZQorICovCisKKyNpZm5kZWYgX19ORVRfQVJNX1JFR0lTVEVSU19ICisjZGVmaW5lIF9fTkVUX0FSTV9SRUdJU1RFUlNfSAorCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIGZ1bmRhbWVudGFsIGNvbnN0YW50cyA6ICovCisvKiB0aGUgaW5wdXQgY3J5c3RhbC9jbG9jayBmcmVxdWVuY3kgKCBpbiBIeiApICovCisjZGVmaW5lCU5FVEFSTV9YVEFMX0ZSRVFfMjVNSHoJCSgxODQzMjAwMCkKKyNkZWZpbmUJTkVUQVJNX1hUQUxfRlJFUV8zM01IegkJKDIzNjk4MDAwKQorI2RlZmluZSBORVRBUk1fWFRBTF9GUkVRX0VNTElOMQkJKDIwMDAwMDAwKQorCisvKiB0aGUgZnJlcXVlbmN5IG9mIFNZU19DTEsgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19ORVRBUk1fRU1MSU4pCisKKy8qIEVNTElOIGJvYXJkOiAgMzMgTUh6IChleHAuKSAqLworI2RlZmluZQlORVRBUk1fUExMX0NPVU5UX1ZBTAkJNgorI2RlZmluZSBORVRBUk1fWFRBTF9GUkVRCQlORVRBUk1fWFRBTF9GUkVRXzI1TUh6CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX05FVEFSTV9ORVQ0MF9SRVYyKQorCisvKiBORVQrNDAgUmV2MiBib2FyZHM6ICAzMyBNSHogKHdpdGggTkVUQVJNX1hUQUxfRlJFUV8yNU1IeikgKi8KKyNkZWZpbmUJTkVUQVJNX1BMTF9DT1VOVF9WQUwJCTYKKyNkZWZpbmUJTkVUQVJNX1hUQUxfRlJFUQkJTkVUQVJNX1hUQUxfRlJFUV8yNU1IegorCisjZWxpZiBkZWZpbmVkKENPTkZJR19ORVRBUk1fTkVUNDBfUkVWNCkKKworLyogTkVUKzQwIFJldjQgYm9hcmRzIHdpdGggRURPIG11c3QgY2xvY2sgc2xvd2VyOiAyNSBNSHogKHdpdGgKKyAgIE5FVEFSTV9YVEFMX0ZSRVFfMjVNSHopIDQgKi8KKyNkZWZpbmUJTkVUQVJNX1BMTF9DT1VOVF9WQUwJCTQKKyNkZWZpbmUJTkVUQVJNX1hUQUxfRlJFUQkJTkVUQVJNX1hUQUxfRlJFUV8yNU1IegorCisjZWxzZSAgLyogQ09ORklHX05FVEFSTV9ORVQ1MCAqLworCisvKiBORVQrNTAgYm9hcmRzOiAgNDAgTUh6ICh3aXRoIE5FVEFSTV9YVEFMX0ZSRVFfMjVNSHopICovCisjZGVmaW5lIE5FVEFSTV9QTExfQ09VTlRfVkFMCQk4CisjZGVmaW5lCU5FVEFSTV9YVEFMX0ZSRVEJCU5FVEFSTV9YVEFMX0ZSRVFfMjVNSHoKKworI2VuZGlmCisKKy8qICNpbmNsdWRlICJhcm1fcmVnaXN0ZXJzLmgiICovCisjaW5jbHVkZSA8YXNtL2FyY2gvbmV0YXJtX2dlbl9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9uZXRhcm1fbWVtX21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL25ldGFybV9zZXJfbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbmV0YXJtX2VuaV9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9uZXRhcm1fZG1hX21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL25ldGFybV9ldGhfbW9kdWxlLmg+CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L25ldGFybV9zZXJfbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L25ldGFybV9zZXJfbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlYWJkMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbmV0YXJtX3Nlcl9tb2R1bGUuaApAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW5ldGFybS9uZXRhcm1fc2VyX21vZHVsZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIE5FVHNpbGljb24sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMCBSZWQgSGF0LCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCBieSBSZWQgSGF0LiBMSUNFTlNFRSBhZ3JlZXMgdGhhdAorICogaXQgd2lsbCBub3QgZGVsZXRlIHRoaXMgY29weXJpZ2h0IG5vdGljZSwgdHJhZGVtYXJrcyBvciBwcm90ZWN0aXZlCisgKiBub3RpY2VzIGZyb20gYW55IGNvcHkgbWFkZSBieSBMSUNFTlNFRS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUy1JUyIgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkKKyAqIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorICogcHVycG9zZSByZWdhcmRpbmcgdGhpcyBzb2Z0d2FyZS4gSW4gbm8gZXZlbnQgc2hhbGwgUmVkIEhhdAorICogYmUgbGlhYmxlIGZvciBhbnkgaW5kaXJlY3QsIGNvbnNlcXVlbnRpYWwsIG9yIGluY2lkZW50YWwgZGFtYWdlcywKKyAqIGxvc3Mgb2YgcHJvZml0cyBvciByZXZlbnVlLCBsb3NzIG9mIHVzZSBvciBkYXRhLCBvciBpbnRlcnJ1cHRpb24KKyAqIG9mIGJ1c2luZXNzLCB3aGV0aGVyIHRoZSBhbGxlZ2VkIGRhbWFnZXMgYXJlIGxhYmVsZWQgaW4gY29udHJhY3QsCisgKiB0b3J0LCBvciBpbmRlbW5pdHkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIGF1dGhvcihzKSA6IEpvZSBkZUJsYXF1aWVyZQorICogICAgICAgICAgICAgQ2xhcmsgV2lsbGlhbXMKKyAqLworCisjaWZuZGVmIF9fTkVUQVJNX1NFUl9NT0RVTEVfUkVHSVNURVJTX0gKKyNkZWZpbmUgX19ORVRBUk1fU0VSX01PRFVMRV9SRUdJU1RFUlNfSAorCisjaWZuZGVmCV9fQVNTRU1CTEVSX18KKworLyogKC0tc3ViKSNpbmNsdWRlICJ0eXBlcy5oIiAqLworCisvKiBzZXJpYWwgY2hhbm5lbCBjb250cm9sIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICB1MzIJY3RybF9hOworICB1MzIJY3RybF9iOworICB1MzIJc3RhdHVzX2E7CisgIHUzMgliaXRyYXRlOworICB1MzIJZmlmbzsKKyAgdTMyCXJ4X2J1Zl90aW1lcjsKKyAgdTMyCXJ4X2NoYXJfdGltZXI7CisgIHUzMglyeF9tYXRjaDsKKyAgdTMyCXJ4X21hdGNoX21hc2s7CisgIHUzMgljdHJsX2M7CisgIHUzMglzdGF0dXNfYjsKKyAgdTMyCXN0YXR1c19jOworICB1MzIJZmlmb19sYXN0OworICB1MzIJdW51c2VkWzNdOworfSBuZXRhcm1fc2VyaWFsX2NoYW5uZWxfdDsKKworI2VuZGlmCisKKy8qIFNFUiB1bml0IHJlZ2lzdGVyIG9mZnNldHMgKi8KKworLyogI2lmZGVmIENPTkZJR19BUkNIX05FVEFSTSAqLworI2RlZmluZQlORVRBUk1fU0VSX01PRFVMRV9CQVNFCQkoMHhGRkQwMDAwMCkKKy8qICNlbHNlICovCisvKiBleHRlcm4gc2VyaWFsX2NoYW5uZWxfdCBuZXRhcm1fZHVtbXlfcmVnaXN0ZXJzW107ICovCisvKiAjZGVmaW5lIE5FVEFSTV9TRVJfTU9EVUxFX0JBU0UJCShuZXRhcm1fZHVtbXlfcmVnaXN0ZXJzKSAqLworLyogI2lmbmRlZiBORVRBUk1fWFRBTF9GUkVRICovCisvKiAjZGVmaW5lIE5FVEFSTV9YVEFMX0ZSRVEgICAgICAgICAgICAgICAgMTg0MzIwMDAgKi8KKy8qICNlbmRpZiAqLworLyogI2VuZGlmICovCisKKy8qIGNhbGN1bGF0ZSB0aGUgc3lzY2xrIHZhbHVlIGZyb20gdGhlIHBsbCBzZXR0aW5nICovCisjZGVmaW5lCU5FVEFSTV9QTExFRF9TWVNDTEtfRlJFUQkoKCBORVRBUk1fWFRBTF9GUkVRIC8gNSApICogXAorCQkJCQkgKCBORVRBUk1fUExMX0NPVU5UX1ZBTCArIDMgKSkKKworI2RlZmluZSBnZXRfc2VyaWFsX2NoYW5uZWwoYykgKCYoKChuZXRhcm1fc2VyaWFsX2NoYW5uZWxfdCAqKU5FVEFSTV9TRVJfTU9EVUxFX0JBU0UpW2NdKSkKKworI2RlZmluZQlORVRBUk1fU0VSX0NIMV9DVFJMX0EJCSgweDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NIMV9DVFJMX0IJCSgweDA0KQorI2RlZmluZQlORVRBUk1fU0VSX0NIMV9TVEFUVVNfQQkJKDB4MDgpCisjZGVmaW5lCU5FVEFSTV9TRVJfQ0gxX0JJVFJBVEUJCSgweDBDKQorI2RlZmluZQlORVRBUk1fU0VSX0NIMV9GSUZPCQkoMHgxMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDFfUlhfQlVGX1RNUgkoMHgxNCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDFfUlhfQ0hBUl9UTVIJKDB4MTgpCisjZGVmaW5lCU5FVEFSTV9TRVJfQ0gxX1JYX01BVENICQkoMHgxYykKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDFfUlhfTUFUQ0hfTUFTSwkoMHgyMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDFfQ1RSTF9DCQkoMHgyNCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDFfU1RBVFVTX0IJCSgweDI4KQorI2RlZmluZQlORVRBUk1fU0VSX0NIMV9TVEFUVVNfQwkJKDB4MmMpCisjZGVmaW5lCU5FVEFSTV9TRVJfQ0gxX0ZJRk9fTEFTVAkoMHgzMCkKKworI2RlZmluZQlORVRBUk1fU0VSX0NIMl9DVFJMX0EJCSgweDQwKQorI2RlZmluZQlORVRBUk1fU0VSX0NIMl9DVFJMX0IJCSgweDQ0KQorI2RlZmluZQlORVRBUk1fU0VSX0NIMl9TVEFUVVNfQQkJKDB4NDgpCisjZGVmaW5lCU5FVEFSTV9TRVJfQ0gyX0JJVFJBVEUJCSgweDRDKQorI2RlZmluZQlORVRBUk1fU0VSX0NIMl9GSUZPCQkoMHg1MCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDJfUlhfQlVGX1RNUgkoMHg1NCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDJfUlhfQ0hBUl9UTVIJKDB4NTgpCisjZGVmaW5lCU5FVEFSTV9TRVJfQ0gyX1JYX01BVENICQkoMHg1YykKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDJfUlhfTUFUQ0hfTUFTSwkoMHg2MCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDJfQ1RSTF9DCQkoMHg2NCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DSDJfU1RBVFVTX0IJCSgweDY4KQorI2RlZmluZQlORVRBUk1fU0VSX0NIMl9TVEFUVVNfQwkJKDB4NmMpCisjZGVmaW5lCU5FVEFSTV9TRVJfQ0gyX0ZJRk9fTEFTVAkoMHg3MCkKKworLyogc2VsZWN0IGJpdGZpZWxkIGRlZmludGlvbnMgKi8KKworLyogQ29udHJvbCBSZWdpc3RlciBBICovCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExBX0VOQUJMRQkJKDB4ODAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9CUksJCSgweDQwMDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9TVElDS1AJCSgweDIwMDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9QX0VWRU4JCSgweDE4MDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfUF9PREQJCSgweDA4MDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfUF9OT05FCQkoMHgwMDAwMDAwMCkKKworLyogaWYgeW91IHJlYWQgdGhlIGVycmF0YSwgeW91IHdpbGwgZmluZCB0aGF0IHRoZSBTVE9QIGJpdHMgZG9uJ3Qgd29yayByaWdodCAqLworI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfMlNUT1AJCSgweDAwMDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfM1NUT1AJCSgweDA0MDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV81QklUUwkJKDB4MDAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV82QklUUwkJKDB4MDEwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV83QklUUwkJKDB4MDIwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV84QklUUwkJKDB4MDMwMDAwMDApCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExBX0NUU1RYCQkoMHgwMDgwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExBX1JUU1JYCQkoMHgwMDQwMDAwMCkKKworI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfTE9PUF9SRU0JKDB4MDAyMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9MT09QX0xPQwkoMHgwMDEwMDAwMCkKKworI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfR1BJTzIJCSgweDAwMDgwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfR1BJTzEJCSgweDAwMDQwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9EVFJfRU4JCSgweDAwMDIwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfUlRTX0VOCQkoMHgwMDAxMDAwMCkKKworI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfSUVfUlhfQlJLCSgweDAwMDA4MDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfSUVfUlhfRlJNRVJSCSgweDAwMDA0MDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfSUVfUlhfUEFSRVJSCSgweDAwMDAyMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfSUVfUlhfT1ZFUlJVTgkoMHgwMDAwMTAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExBX0lFX1JYX1JEWQkoMHgwMDAwMDgwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExBX0lFX1JYX0hBTEYJKDB4MDAwMDA0MDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9JRV9SWF9GVUxMCSgweDAwMDAwMjAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfSUVfUlhfRE1BRU4JKDB4MDAwMDAxMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9JRV9SWF9EQ0QJKDB4MDAwMDAwODApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9JRV9SWF9SSQkoMHgwMDAwMDA0MCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExBX0lFX1JYX0RTUgkoMHgwMDAwMDAyMCkKKworI2RlZmluZSBORVRBUk1fU0VSX0NUTEFfSUVfUlhfQUxMCShORVRBUk1fU0VSX0NUTEFfSUVfUlhfQlJLIFwKKwkJCQkJfE5FVEFSTV9TRVJfQ1RMQV9JRV9SWF9GUk1FUlIgXAorCQkJCQl8TkVUQVJNX1NFUl9DVExBX0lFX1JYX1BBUkVSUiBcCisJCQkJCXxORVRBUk1fU0VSX0NUTEFfSUVfUlhfT1ZFUlJVTiBcCisJCQkJCXxORVRBUk1fU0VSX0NUTEFfSUVfUlhfUkRZIFwKKwkJCQkJfE5FVEFSTV9TRVJfQ1RMQV9JRV9SWF9IQUxGIFwKKwkJCQkJfE5FVEFSTV9TRVJfQ1RMQV9JRV9SWF9GVUxMIFwKKwkJCQkJfE5FVEFSTV9TRVJfQ1RMQV9JRV9SWF9ETUFFTiBcCisJCQkJCXxORVRBUk1fU0VSX0NUTEFfSUVfUlhfRENEIFwKKwkJCQkJfE5FVEFSTV9TRVJfQ1RMQV9JRV9SWF9SSSBcCisJCQkJCXxORVRBUk1fU0VSX0NUTEFfSUVfUlhfRFNSKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9JRV9UWF9DVFMJKDB4MDAwMDAwMTApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9JRV9UWF9FTVBUWQkoMHgwMDAwMDAwOCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExBX0lFX1RYX0hBTEYJKDB4MDAwMDAwMDQpCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQV9JRV9UWF9GVUxMCSgweDAwMDAwMDAyKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEFfSUVfVFhfRE1BRU4JKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgTkVUQVJNX1NFUl9DVExBX0lFX1RYX0FMTAkoTkVUQVJNX1NFUl9DVExBX0lFX1RYX0NUUyBcCisJCQkJCXxORVRBUk1fU0VSX0NUTEFfSUVfVFhfRU1QVFkgXAorCQkJCQl8TkVUQVJNX1NFUl9DVExBX0lFX1RYX0hBTEYgXAorCQkJCQl8TkVUQVJNX1NFUl9DVExBX0lFX1RYX0ZVTEwgXAorCQkJCQl8TkVUQVJNX1NFUl9DVExBX0lFX1RYX0RNQUVOKQorCisvKiBDb250cm9sIFJlZ2lzdGVyIEIgKi8KKworI2RlZmluZQlORVRBUk1fU0VSX0NUTEJfTUFUQ0gxX0VOCSgweDgwMDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEJfTUFUQ0gyX0VOCSgweDQwMDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEJfTUFUQ0gzX0VOCSgweDIwMDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEJfTUFUQ0g0X0VOCSgweDEwMDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQl9SQkdUX0VOCQkoMHgwODAwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExCX1JDR1RfRU4JCSgweDA0MDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQl9VQVJUX01PREUJKDB4MDAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQl9IRExDX01PREUJKDB4MDAxMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQl9TUElfTUFTX01PREUJKDB4MDAyMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQ1RMQl9TUElfU0xWX01PREUJKDB4MDAzMDAwMDApCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExCX1JFVl9CSVRfT1JERVIJKDB4MDAwODAwMDApCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9DVExCX01BTTEJCSgweDAwMDQwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0NUTEJfTUFNMgkJKDB4MDAwMjAwMDApCisKKy8qIFN0YXR1cyBSZWdpc3RlciBBICovCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9NQVRDSDEJCSgweDgwMDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX01BVENIMgkJKDB4NDAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfTUFUQ0gzCQkoMHgyMDAwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9NQVRDSDQJCSgweDEwMDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfQkdBUAkJKDB4ODAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfQ0dBUAkJKDB4NDAwMDAwMDApCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9SWF8xQgkJKDB4MDAxMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfUlhfMkIJCSgweDAwMjAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1JYXzNCCQkoMHgwMDMwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9SWF80QgkJKDB4MDAwMDAwMDApCisKKy8qIGRvd25zaGlmdGVkIHZhbHVlcyAqLworCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfUlhGREJfMUJZVEVTCSgweDAwMSkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9SWEZEQl8yQllURVMJKDB4MDAyKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1JYRkRCXzNCWVRFUwkoMHgwMDMpCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfUlhGREJfNEJZVEVTCSgweDAwMCkKKworI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1JYRkRCX01BU0sJKDB4MDAzMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfUlhGREIoeCkJKCgoeCkgJiBORVRBUk1fU0VSX1NUQVRBX1JYRkRCX01BU0spIFwKKwkJCQkJID4+IDIwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfRENECQkoMHgwMDA4MDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9SSQkJKDB4MDAwNDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfRFNSCQkoMHgwMDAyMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9DVFMJCSgweDAwMDEwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfUlhfQlJLCQkoMHgwMDAwODAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9SWF9GUk1FUlIJKDB4MDAwMDQwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfUlhfUEFSRVJSCSgweDAwMDAyMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1JYX09WRVJSVU4JKDB4MDAwMDEwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfUlhfUkRZCQkoMHgwMDAwMDgwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9SWF9IQUxGCSgweDAwMDAwNDAwKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1JYX0NMT1NFRAkoMHgwMDAwMDIwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9SWF9GVUxMCSgweDAwMDAwMTAwKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1JYX0RDRAkJKDB4MDAwMDAwODApCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfUlhfUkkJCSgweDAwMDAwMDQwKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1JYX0RTUgkJKDB4MDAwMDAwMjApCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9UWF9DVFMJCSgweDAwMDAwMDEwKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1RYX1JEWQkJKDB4MDAwMDAwMDgpCisjZGVmaW5lCU5FVEFSTV9TRVJfU1RBVEFfVFhfSEFMRgkoMHgwMDAwMDAwNCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9TVEFUQV9UWF9GVUxMCSgweDAwMDAwMDAyKQorI2RlZmluZQlORVRBUk1fU0VSX1NUQVRBX1RYX0RNQUVOCSgweDAwMDAwMDAxKQorCisvKiB5b3UgaGF2ZSB0byBjbGVhciBhbGwgcmVjZWl2ZSBzaWduYWxzIHRvIGdldCB0aGUgZmlmbyB0byBtb3ZlIGZvcndhcmQgKi8KKyNkZWZpbmUgTkVUQVJNX1NFUl9TVEFUQV9DTFJfQUxMCShORVRBUk1fU0VSX1NUQVRBX1JYX0JSSyB8IFwKKwkJCQkJIE5FVEFSTV9TRVJfU1RBVEFfUlhfRlJNRVJSIHwgXAorCQkJCQkgTkVUQVJNX1NFUl9TVEFUQV9SWF9QQVJFUlIgfCBcCisJCQkJCSBORVRBUk1fU0VSX1NUQVRBX1JYX09WRVJSVU4gfCBcCisJCQkJCSBORVRBUk1fU0VSX1NUQVRBX1JYX0hBTEYgfCBcCisJCQkJCSBORVRBUk1fU0VSX1NUQVRBX1JYX0NMT1NFRCB8IFwKKwkJCQkJIE5FVEFSTV9TRVJfU1RBVEFfUlhfRlVMTCB8IFwKKwkJCQkJIE5FVEFSTV9TRVJfU1RBVEFfUlhfRENEIHwgXAorCQkJCQkgTkVUQVJNX1NFUl9TVEFUQV9SWF9SSSB8IFwKKwkJCQkJIE5FVEFSTV9TRVJfU1RBVEFfUlhfRFNSIHwgXAorCQkJCQkgTkVUQVJNX1NFUl9TVEFUQV9UWF9DVFMgKQorCisvKiBCaXQgUmF0ZSBSZWdpc3RlcnMgKi8KKworI2RlZmluZQlORVRBUk1fU0VSX0JSX0VOCQkoMHg4MDAwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9CUl9UTU9ERQkJKDB4NDAwMDAwMDApCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9CUl9SWF9DTEtfSU5UCSgweDAwMDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0JSX1JYX0NMS19FWFQJKDB4MjAwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQlJfVFhfQ0xLX0lOVAkoMHgwMDAwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9CUl9UWF9DTEtfRVhUCSgweDEwMDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQlJfUlhfQ0xLX0RSVgkoMHgwODAwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9CUl9UWF9DTEtfRFJWCSgweDA0MDAwMDAwKQorCisjZGVmaW5lCU5FVEFSTV9TRVJfQlJfQ0xLX0VYVF81CQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUJTkVUQVJNX1NFUl9CUl9DTEtfU1lTVEVNCSgweDAxMDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX0JSX0NMS19PVVQxQQkJKDB4MDIwMDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQlJfQ0xLX09VVDJBCQkoMHgwMzAwMDAwMCkKKworI2RlZmluZQlORVRBUk1fU0VSX0JSX1RYX0NMS19JTlYJKDB4MDA4MDAwMDApCisjZGVmaW5lCU5FVEFSTV9TRVJfQlJfUlhfQ0xLX0lOVgkoMHgwMDQwMDAwMCkKKworLyogY29tcGxldGUgc2V0dGluZ3MgYXNzdW1pbmcgc3lzdGVtIGNsb2NrIGlucHV0IGlzIDE4TUh6ICovCisKKyNkZWZpbmUJTkVUQVJNX1NFUl9CUl9NQVNLCQkoMHgwMDAwMDdGRikKKworLyogYml0IHJhdGUgZGV0ZXJtaW5lZCBmcm9tIGVxdWF0aW9uIEZiciA9IEZ4dGFsIC8gWyAxMCAqICggTiArIDEgKSBdICovCisvKiBmcm9tIHNlY3Rpb24gNy41LjQgb2YgSFcgUmVmIEd1aWRlICovCisKKy8qICNpZmRlZiBDT05GSUdfTkVUQVJNX1BMTF9CWVBBU1MgKi8KKyNkZWZpbmUJTkVUQVJNX1NFUl9CUl9YMTYoeCkJKCBORVRBUk1fU0VSX0JSX0VOIHwgCQkJXAorCQkJCSAgTkVUQVJNX1NFUl9CUl9SWF9DTEtfSU5UIHwgCQlcCisJCQkJICBORVRBUk1fU0VSX0JSX1RYX0NMS19JTlQgfCAJCVwKKwkJCQkgIE5FVEFSTV9TRVJfQlJfQ0xLX0VYVF81IHwgCQlcCisJCQkJICAoICggKCAoIE5FVEFSTV9YVEFMX0ZSRVEgLyAJCVwKKwkJCQkgICAgICAgICAgKCB4ICogMTAgKSApIC0gMSApIC8JMTYgKSAmIAlcCisJCQkJICAgIE5FVEFSTV9TRVJfQlJfTUFTSyApICkKKy8qCisjZWxzZQorI2RlZmluZQlORVRBUk1fU0VSX0JSX1gxNih4KQkoIE5FVEFSTV9TRVJfQlJfRU4gfCAJCQlcCisJCQkJICBORVRBUk1fU0VSX0JSX1JYX0NMS19JTlQgfCAJCVwKKwkJCQkgIE5FVEFSTV9TRVJfQlJfVFhfQ0xLX0lOVCB8IAkJXAorCQkJCSAgTkVUQVJNX1NFUl9CUl9DTEtfU1lTVEVNIHwgCQlcCisJCQkJICAoICggKCAoIE5FVEFSTV9QTExFRF9TWVNDTEtfRlJFUSAvIAkJXAorCQkJCSAgICAgICAgICAoIHggKiAyICkgKSAtIDEgKSAvCTE2ICkgJiAJXAorCQkJCSAgICBORVRBUk1fU0VSX0JSX01BU0sgKSApCisjZW5kaWYKKyovCisKKy8qIFJlY2VpdmUgQnVmZmVyIEdhcCBUaW1lciAqLworCisjZGVmaW5lCU5FVEFSTV9TRVJfUlhfR0FQX1RJTUVSX0VOCSgweDgwMDAwMDAwKQorI2RlZmluZQlORVRBUk1fU0VSX1JYX0dBUF9NQVNLCQkoMHgwMDAwM0ZGRikKKworLyogcnggZ2FwIGlzIGEgZnVuY3Rpb24gb2YgYml0IHJhdGUgeCAqLworCisvKiAjaWZkZWYgQ09ORklHX05FVEFSTV9QTExfQllQQVNTICovCisjZGVmaW5lCU5FVEFSTV9TRVJfUlhHQVAoeCkJKCBORVRBUk1fU0VSX1JYX0dBUF9USU1FUl9FTiB8CQlcCisJCQkJICAoICggKCAoIDEwICogTkVUQVJNX1hUQUxfRlJFUSApIC8JXAorCQkJCSAgICAgICAgKCB4ICogNSAqIDUxMiApICkgLSAxICkgJiAJXAorCQkJICAgICAgICAgICAgICBORVRBUk1fU0VSX1JYX0dBUF9NQVNLICkgKQorLyoKKyNlbHNlCisjZGVmaW5lCU5FVEFSTV9TRVJfUlhHQVAoeCkJKCBORVRBUk1fU0VSX1JYX0dBUF9USU1FUl9FTiB8CQkJXAorCQkJCSAgKCAoICggKCAyICogTkVUQVJNX1BMTEVEX1NZU0NMS19GUkVRICkgLwlcCisJCQkJICAgICAgICAoIHggKiA1MTIgKSApIC0gMSApICYgCQkJXAorCQkJICAgICAgICAgICAgICBORVRBUk1fU0VSX1JYX0dBUF9NQVNLICkgKQorI2VuZGlmCisqLworCisjaWYgMAorI2RlZmluZQlORVRBUk1fU0VSX1JYR0FQKHgpCSggTkVUQVJNX1NFUl9SWF9HQVBfVElNRVJfRU4gfAkJXAorCQkJCSAgKCAoICggKCAyICogTkVUQVJNX1BMTEVEX1NZU0NMS19GUkVRICkgLwlcCisJCQkJICAgICAgICAoIHggKiA1ICogNTEyICkgKSAtIDEgKSAmIAlcCisJCQkgICAgICAgICAgICAgIE5FVEFSTV9TRVJfUlhfR0FQX01BU0sgKSApCisjZGVmaW5lCU5FVEFSTV9TRVJfUlhHQVAoeCkJKCBORVRBUk1fU0VSX1JYX0dBUF9USU1FUl9FTiB8CQlcCisJCQkJICAoICggKCAoIDEwICogTkVUQVJNX1hUQUxfRlJFUSApIC8JXAorCQkJCSAgICAgICAgKCB4ICogNTEyICkgKSAtIDEgKSAmIAlcCisJCQkgICAgICAgICAgICAgIE5FVEFSTV9TRVJfUlhfR0FQX01BU0sgKSApCisjZW5kaWYKKworI2RlZmluZSBNSU5fQkFVRF9SQVRFICAgICAgICA2MDAKKyNkZWZpbmUgTUFYX0JBVURfUkFURSAgICAgMTE1MjAwCisKKy8qIHRoZSBkZWZhdWx0IEJBVUQgcmF0ZSBmb3IgdGhlIEJPT1RMT0FERVIsIHRoZXJlIGlzIGEgc2VwYXJhdGUgKi8KKy8qIHNldHRpbmcgaW4gdGhlIHNlcmlhbCBkcml2ZXIgPGFyY2gvYXJtbm9tbXUvZHJpdmVycy9jaGFyL3NlcmlhbC1uZXRhcm0uaD4gKi8KKyNkZWZpbmUgREVGQVVMVF9CQVVEX1JBVEUgOTYwMAorI2RlZmluZSBORVRBUk1fU0VSX0ZJRk9fU0laRSAzMgorI2RlZmluZSBNSU5fR0FQIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9jb25mZGVmcy5oIGIvaW5jbHVkZS9jbWRfY29uZmRlZnMuaAppbmRleCBlYmVhNTZiLi5hZjU2NTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NtZF9jb25mZGVmcy5oCisrKyBiL2luY2x1ZGUvY21kX2NvbmZkZWZzLmgKQEAgLTg1LDYgKzg1LDcgQEAKICNkZWZpbmUgQ0ZHX0NNRF9NTUMJMHgwMDA4MDAwMDAwMDAwMDAwVQkvKiBNTUMgc3VwcG9ydAkJCSovCiAjZGVmaW5lIENGR19DTURfRkFUCTB4MDAxMDAwMDAwMDAwMDAwMFUJLyogRkFUIHN1cHBvcnQJCQkqLwogI2RlZmluZSBDRkdfQ01EX0lNTFMJMHgwMDIwMDAwMDAwMDAwMDAwVQkvKiBMaXN0IGFsbCBmb3VuZCBpbWFnZXMgICAgICAgICovCisjZGVmaW5lIENGR19DTURfSVRFU1QJMHgwMDQwMDAwMDAwMDAwMDAwVQkvKiBJbnRlZ2VyIChhbmQgc3RyaW5nKSB0ZXN0CSovCiAKICNkZWZpbmUgQ0ZHX0NNRF9BTEwJMHhGRkZGRkZGRkZGRkZGRkZGVQkvKiBBTEwgY29tbWFuZHMJCQkqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbW9kbmV0NTAuaCBiL2luY2x1ZGUvY29uZmlncy9tb2RuZXQ1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMWI0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbW9kbmV0NTAuaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogSU1NUywgZ0dtYkggPHd3dy5pbW1zLmRlPgorICogVGhvbWFzIEVsc3RlIDxpbmZvQGVsc3RlLm9yZz4KKyAqCisgKiBDb25maWd1YXRpb24gc2V0dGluZ3MgZm9yIE1vZE5FVDUwIGJvYXJkLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBJZiB3ZSBhcmUgZGV2ZWxvcGluZywgd2UgbWlnaHQgd2FudCB0byBzdGFydCB1LWJvb3QgZnJvbSByYW0KKyAqIHNvIHdlIE1VU1QgTk9UIGluaXRpYWxpemUgY3JpdGljYWwgcmVncyBsaWtlIG1lbS10aW1pbmcgLi4uCisgKi8KKyNkZWZpbmUgQ09ORklHX0lOSVRfQ1JJVElDQUwgICAgICAgICAgICAvKiB1bmRlZiBmb3IgZGV2ZWxvcGluZyAqLworCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqIChlYXN5IHRvIGNoYW5nZSkKKyAqLworI2RlZmluZSBDT05GSUdfQVJNNwkJMQkvKiBUaGlzIGlzIGEgQVJNNyBDUFUJKi8KKyNkZWZpbmUgQ09ORklHX0FSTV9USFVNQgkxCS8qIHRoaXMgaXMgYW4gQVJNNzIwVERNSSAqLworI2RlZmluZSBDT05GSUdfTkVUQVJNICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSBOZXRzaWNsaWNvbiBORVQrQVJNICovCisjdW5kZWYgIENPTkZJR19ORVRBUk1fTkVUNDBfUkVWMiAgICAgICAgLyogaXQncyBhIE5ldCs0MCBSZXYuIDIgKi8KKyN1bmRlZiAgQ09ORklHX05FVEFSTV9ORVQ0MF9SRVY0CS8qIGl0J3MgYSBOZXQrNDAgUmV2LiA0ICovCisjZGVmaW5lIENPTkZJR19ORVRBUk1fTkVUNTAgICAgICAgICAgICAgLyogaXQncyBhIE5ldCs1MCAqLworCisjZGVmaW5lIENPTkZJR19NT0RORVQ1MAkJMQkvKiBvbiBhbiBNb2RORVQ1MCBCb2FyZCAgICAgICovCisKKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCS8qIGRvbid0IG5lZWQgdGhlbSBhbnltb3JlICovCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCoxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworI2RlZmluZSBDT05GSUdfRFJJVkVSX05FVEFSTUVUSCAxCisKKy8qCisgKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19TRVJJQUwxCQkxCS8qIHdlIHVzZSBTZXJpYWwgbGluZSAxICovCisKKy8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTM4NDAwCisKKyNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sgICAgICAgKENPTkZJR19CT09UUF9ERUZBVUxUfENPTkZJR19CT09UUF9CT09URklMRVNJWkUpCisKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9KRkZTMikpCisKKy8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDT05GSUdfTkVUTUFTSyAgICAgICAgICAyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMzAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAgICAgICAgICAxOTIuMTY4LjMwLjEyMgorI2RlZmluZSBDRkdfRVRIX1BIWV9BRERSICAgICAgICAweDEwMAorI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcgICAgICAvKiBzdWJtaXQgYm9vdGFyZ3MgdG8ga2VybmVsICovCisKKy8qI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTEwKi8KKy8qIGFyZ3MgYW5kIGNtZCBmb3IgdUNsaW51eC1pbWFnZSBAIDB4MTAwMjAwMDAsIHJhbWRpc2staW1hZ2UgQCAweDEwMGEwMDAwICovCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdG0gMHgxMDAyMDAwMCAweDEwMGEwMDAwIgorI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgICAgCSJjb25zb2xlPXR0eVMwLDM4NDAwIGluaXRyZD0weDEwMGEwMDQwLDUzMEsgcm9vdD0vZGV2L3JhbSBrZWVwaW5pdHJkIgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMjMwNDAwCQkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLworI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMgkJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJKi8KKyNkZWZpbmUJQ0ZHX1BST01QVAkJIm1vZG5ldDUwICMgIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lCUNGR19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUJQ0ZHX1BCU0laRSAgICAgICAgICAgICAgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZQlDRkdfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19CQVJHU0laRQkJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDQwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwMDgwMDAwMAkvKiA0IC4uLiA4IE1CIGluIERSQU0JKi8KKworI3VuZGVmICBDRkdfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLworCisjZGVmaW5lCUNGR19MT0FEX0FERFIJCTB4MDA1MDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KKworI2RlZmluZQlDRkdfSFoJCQk5MDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDIga0h6ICovCisKKwkJCQkJCS8qIHZhbGlkIGJhdWRyYXRlcyAqLworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFjayBzaXplcworICoKKyAqIFRoZSBzdGFjayBzaXplcyBhcmUgc2V0IHVwIGluIHN0YXJ0LlMgdXNpbmcgdGhlIHNldHRpbmdzIGJlbG93CisqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgxMjgqMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRCSg0KjEwMjQpCS8qIElSUSBzdGFjayAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0ZJUQkoNCoxMDI0KQkvKiBGSVEgc3RhY2sgKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQaHlzaWNhbCBNZW1vcnkgTWFwCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQkgICAvKiB3ZSBoYXZlIDEgYmFua3Mgb2YgRFJBTSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzEJCTB4MDAwMDAwMDAgLyogU0RSQU0gQmFuayAjMSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQkweDAxMDAwMDAwIC8qIDE2IE1CICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMgkJMHgwMTAwMDAwMCAvKiBTRFJBTSBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMl9TSVpFCTB4MDEwMDAwMDAgLyogMTYgTUIgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4MTAwMDAwMDAgLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIXzFfU0laRQkweDAwMjAwMDAwIC8qIDIgTUIgKG9uZSBjaGlwIG9ubHksIDE2Yml0IGFjY2VzcykgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIXzIgICAgICAgICAgICAweDEwMjAwMDAxCisjZGVmaW5lIFBIWVNfRkxBU0hfMl9TSVpFICAgICAgIDB4MDAyMDAwMDAKKworI2RlZmluZSBDT05GSUdfTkVUQVJNX0VFUFJPTQorLyogI2lmZGVmIENPTkZJR19ORVRBUk1fRUVQUk9NICovCisjZGVmaW5lIFBIWVNfTlZSQU1fMQkJMHgyMDAwMDAwMCAvKiBFRVBST00gQmFuayAjMSAqLworI2RlZmluZSBQSFlTX05WUkFNX1NJWkUJCTB4MDAwMDIwMDAgLyogOCBLQiAqLworLyogI2VuZGlmICovCisKKyNkZWZpbmUgUEhZU19FWFRfMQkJMHgzMDAwMDAwMCAvKiBFeHRlbnNpb25zIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19FWFRfU0laRQkJMHgwMTAwMDAwMCAvKiAzMiBNQiBtZW1vcnkgbWFwcGVkIEkvTyAqLworCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQlQSFlTX0ZMQVNIXzEKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1NJWkUJCVBIWVNfRkxBU0hfMV9TSVpFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTM1CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI2RlZmluZSBDRkdfTUFJTl9TRUNUX1NJWkUgICAgICAweDAwMDEwMDAwICAvKiBtYWluIHNpemUgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworCisvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJKDIqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkoMipDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qIGVudmlyb25tZW50IHNldHRpbmdzICovCisjZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gKKyN1bmRlZiBDRkdfRU5WX0lTX05PV0hFUkUKKworI2RlZmluZSBDRkdfRU5WX0FERFIJCTB4MTAwMUMwMDAgLyogZW52aXJvbm1lbnQgc3RhcnQgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRSAgICAgICAweDEwMDAwIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCS8qIG1heCBzaXplIGZvciBlbnZpcm9ubWVudCAqLworCisvKiBGbGFzaCBiYW5rcyBKRkZTMiBzaG91bGQgdXNlICovCisjZGVmaW5lIENGR19KRkZTMl9GSVJTVF9CQU5LICAgIDAKKyNkZWZpbmUgQ0ZHX0pGRlMyX0ZJUlNUX1NFQ1RPUgk4CisjZGVmaW5lIENGR19KRkZTMl9OVU1fQkFOS1MgICAgIDIKKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmF0LmggYi9pbmNsdWRlL2ZhdC5oCmluZGV4IDhmZmZiNDIuLjEzOTEwZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZmF0LmgKKysrIGIvaW5jbHVkZS9mYXQuaApAQCAtNjcsNiArNjcsMTAgQEAKICNkZWZpbmUgREVMRVRFRF9GTEFHCSgoY2hhcikweGU1KSAvKiBNYXJrcyBkZWxldGVkIGZpbGVzIHdoZW4gaW4gbmFtZVswXSAqLwogI2RlZmluZSBhUklORwkJMHgwNQkgICAgIC8qIFVzZWQgdG8gcmVwcmVzZW50ICflJyBpbiBuYW1lWzBdICovCiAKKy8qIEluZGljYXRlcyB0aGF0IHRoZSBlbnRyeSBpcyB0aGUgbGFzdCBsb25nIGVudHJ5IGluIGEgc2V0IG9mIGxvbmcKKyAqIGRpciBlbnRyaWVzCisgKi8KKyNkZWZpbmUgTEFTVF9MT05HX0VOVFJZX01BU0sJMHg0MAogCiAvKiBGbGFncyB0ZWxsaW5nIHdoZXRoZXIgd2Ugc2hvdWxkIHJlYWQgYSBmaWxlIG9yIGxpc3QgYSBkaXJlY3RvcnkgKi8KICNkZWZpbmUgTFNfTk8JMAo=